本帖最后由 laoxu 于 2013-11-7 11:40 编辑
芯唐Cortex-M058S是Nuvoton公司最新推出的M051系列和Mini51系列兼容芯片,除保留M051系列和Mini51系列全部优点,引脚兼容之外,还增加了P5、P6、P7 I/O口,以适应不同层次的用户需求和使用。
俺有幸从21ic上免费申请到一块芯唐Cortex-M058S开发板,想从Nuvoton公司网站下点资料,结果发现开发支持软件没跟上,只有Cortex-M051的资料,最新版本是M051SeriesBSP_v1[1].02.003,俺就从这下手,试用了一下,觉得 I/O口的读写速度还是慢了点,俺在其基础上,编了一些宏指令,通过对寄存器操作,直接从8位GPIO口输入输出,并且增加了指定引脚的I/O位读入,这样,对I/O口的读写,就提升了约一倍速度。顺便增加了整体配置8位GPIO引脚为指定的操作模式的宏指令,比调用原DrvGPIO_Open()函数,对I/O口的引脚指定,需需1位1位依次指定,速度和效率提升了N倍。
其他升级:
通过对芯唐Cortex-M051库,其中三个文件M051Series.h,DrvGPIO.h,DrvGPIO.c的修改,增加了对M058S的P5、P6、P7口的定义以及对相应库函数的修改,全面支持M058S新增加的P5、P6、P7口读写操作和外部P5、P6P7口中断。
部分宏定义修改摘录:
/**********************************************************************************************
用 途 :芯唐Cortex-M051(含M051S)系列MCU
作 者 :许意义
21ic ID :LAOXU
日 期 : 2013-11-2
**********************************************************************************************/
/* Define GPIO[n] Pin I/O Bit Output Control. 指定引脚的I/O位输出 */
#define _PORT_DOUT(PortNum, PinNum) (*((volatile uint32_t *) ((PORT_BIT_DOUT+(0x20*PortNum)) + (0x4*PinNum))))
#define P00_DOUT _PORT_DOUT(0, 0)
#define P01_DOUT _PORT_DOUT(0, 1)
......
#define P70_DOUT _PORT_DOUT(7+7, 0)
#define P71_DOUT _PORT_DOUT(7+7, 1)
/* Define GPIO[n] Pin I/O Bit Get Control. 指定引脚的I/O位读入 */
#define _PORT_GET(PortNum, PinNum) (((*((volatile uint32_t *)(PORT0_BASE+(0x40*PortNum) + (0x10)))) >> (PinNum)) & 0x1)
#define P00_GET _PORT_GET(0, 0)
#define P01_GET _PORT_GET(0, 1)
......
#define P70_GET _PORT_GET(7+7, 0)
#define P71_GET _PORT_GET(7+7, 1)
/* Define GPIO Pin I/O Bits Output Control. 8位GPIO口输出 */
#define _PORT_DOUT_BITS(PortNum) (*((volatile uint32_t *) (PORT0_BASE+(0x40*PortNum) + (0x8))))
#define P0_DOUT _PORT_DOUT_BITS(0)
#define P1_DOUT _PORT_DOUT_BITS(1)
......
#define P6_DOUT _PORT_DOUT_BITS(6+6)
#define P7_DOUT _PORT_DOUT_BITS(7+6)
/* Define GPIO Pin I/O Bits Get Control. 8位GPIO口读入 */
#define _PORT_GET_BITS(PortNum) (*((volatile uint32_t *) (PORT0_BASE+(0x40*PortNum) + (0x10))))
#define P0_GET _PORT_GET_BITS(0)
#define P1_GET _PORT_GET_BITS(1)
......
#define P6_GET _PORT_GET_BITS(6+6)
#define P7_GET _PORT_GET_BITS(7+6)
/* Define GPIO Pin I/O Bits PMD Control. 配置8位GPIO引脚为指定的操作模式(高在先,低在后,依次指定)。*/
......
#define _PORT_MODE_BITS(PortNum) (*((volatile uint32_t *) (PORT0_BASE+(0x40*PortNum))))
#define P0_MODE _PORT_MODE_BITS(0)
#define P1_MODE _PORT_MODE_BITS(1)
......
#define P6_MODE _PORT_MODE_BITS(6+6)
#define P7_MODE _PORT_MODE_BITS(7+6)
#define _PORT_MODE(b7,b6,b5,b4,b3,b2,b1,b0) (((b7<<14)&0xC000ul)|((b6<<12)&0x3000ul)|((b5<<10)&0xC00ul)|((b4<<8)&0x300ul)|
((b3<<6)&0xC0ul)|((b2<<4)&0x30ul)|((b1<<2)&0xCul)|(b0&0x3ul))
#define P0_OPEN(b7,b6,b5,b4,b3,b2,b1,b0) P0_MODE = _PORT_MODE(b7,b6,b5,b4,b3,b2,b1,b0)
//配置P0引脚为指定的操作模式
#define P1_OPEN(b7,b6,b5,b4,b3,b2,b1,b0) P1_MODE = _PORT_MODE(b7,b6,b5,b4,b3,b2,b1,b0)
//配置P1引脚为指定的操作模式
......
#define P6_OPEN(b7,b6,b5,b4,b3,b2,b1,b0) P6_MODE = _PORT_MODE(b7,b6,b5,b4,b3,b2,b1,b0)
//配置P6引脚为指定的操作模式
#define P7_OPEN(b1,b0) P7_MODE = _PORT_MODE(0, 0, 0, 0, 0, 0, b1,b0)
//配置P7引脚为指定的操作模式
/* 请同学们注意了! */
/* 下面的对Port口安装中断回调函数,后面所跟变量数量与原函数不同,增加了Port5和Port6/7两个变量 */
/* 其余芯唐M051库函数,便用方法不变,仅相应的增加了对P5,P6,P7口的操作! */
void DrvGPIO_SetIntCallback(P0P1_CALLBACK pfP0P1Callback, P2P3P4_CALLBACK pfP2P3P4Callback, P5_CALLBACK pfP5Callback, P6P7_CALLBACK pfP6P7Callback)
//为Port0/1,Port2/3/4,Port5和Port6/7安装中断回调函数。
///////////////////////////////////////////////////////////////////
修改与增加部分,操作示范:
void P5Callback(uint32_t u32P5Status) //P5口中断函数
{
P20_DOUT = P20_DOUT ^ 1; /* Toggle LED */
}
void P6P7Callback(uint32_t u32P6Status, uint32_t u32P7Status) //P6P7口中断函数
{
P20_DOUT = P20_DOUT ^ 1; /* Toggle LED */
}
int main (void)
{
......
// 对Port口安装中断回调函数
DrvGPIO_SetIntCallback(P0P1Callback, P2P3P4Callback, P5Callback, P6P7Callback);
......
// 配置8位GPIO引脚为指定的操作模式(依次指定,高在先,低在后)。
P1_OPEN(IO_OUTPUT, IO_OPENDRAIN, IO_QUASI, IO_INPUT, IO_OUTPUT, IO_OPENDRAIN, IO_QUASI, IO_INPUT);
P4_OPEN(QUASI, QUASI, OUTPUT, OUTPUT, OPENDRAIN, OPENDRAIN, INPUT, INPUT);
P1_DOUT = 0x55; // I/O 读写宏操作示例
P4_DOUT = P1_GET;
P3_DOUT = ~P4_GET;
P10_DOUT = 1;
P11_DOUT = P41_GET;
if (P45_GET)
{ P20_DOUT = P20_DOUT ^ 1;
}
......
}
M051SeriesBSP_v1[1].02.003a.rar
(4.33 MB)
|
|