coocox学习系列之CoX_GPIO篇
1.GPIO设计思想
1.1CoX.GPIO发展过程,历史版本
CoX
第一版从
2009
年开始,从
CoX
诞生开始,
CoX
的目标就是要做到在
M
系列的
上实现平滑移植。所以,
GPIO
的实现,第一版首先实现了,
IO
的模式配置(输入、输出)和管脚的上拉、下拉配置;然后,实现了
IO
管脚的状态读写。具体可以从接口定义清晰的看出来:
typedef
struct
{
COX_Status
(*
Init
) (COX_PIO_Dev pio);
COX_Status
(*
Dir
)(COX_PIO_Dev pio,
uint8_t
dir);
uint8_t
(*
Out
)(COX_PIO_Dev pio,
uint8_t
level);
uint8_t
(*
Read
) (COX_PIO_Dev pio);
COX_Status
(*
Cfg
)(COX_PIO_Dev pio,
uint8_t
index,
uint32_t
arg,
uint32_t
*pre_arg);
}
COX_PIO_PI_Def
;
typedef
const
COX_PIO_PI_Def
COX_PIO_PI
;
这样的实现,确实可以大大减小
IO
操作的移植,因为我们在每个厂商实现一套
,以新唐为例:
COX_PIO_PI
pi_pio =
{
NUC_GPIO_Init,
NUC_GPIO_SetDir,
NUC_GPIO_Out,
NUC_GPIO_Read,
NUC_GPIO_Cfg
};
在使用的时候,我们仅仅需要使用
pi_pio
的指针就可以调用
GPIO
的
API
操作了,而且这个指针还可以被驱动嵌套使用。有兴趣的可以参考
NUC140-LB Board
的
CoOS
例程,这个在
www.coocox.org
官网可以下载到。
然而,第一版有几个明显的不足:
1.
实现的功能很少,只有
IO
的基本配置和读写操作,没有外部中断实现,没有多功能配置实现,以及一些其