打印
[工具下载]

最新芯唐Cortex-M058S库 增订和修改说明(2013-11-2)

[复制链接]
6448|25
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
laoxu|  楼主 | 2013-11-2 13:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 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)
评分
参与人数 1威望 +4 收起 理由
dirtwillfly + 4 很给力!
沙发
laoxu|  楼主 | 2013-11-2 14:01 | 只看该作者
其他芯唐库标准用法,就不一一举例了,如:

    DrvGPIO_Open(E_PORT6, E_PIN1, E_IO_INPUT);

    DrvGPIO_ClrBit(E_PORT5, E_PIN0);

    if (DrvGPIO_GetBit(E_PORT7, E_PIN1) != 0)
        {
                i32Err = 1;
        }

使用特权

评论回复
板凳
laoxu|  楼主 | 2013-11-2 14:15 | 只看该作者
注:俺只修改和测试了Keil下的库文件,IAR的未修改和测试!

使用特权

评论回复
地板
mmuuss586| | 2013-11-2 14:28 | 只看该作者

使用特权

评论回复
5
黄小俊| | 2013-11-2 17:45 | 只看该作者
相当好啊,多谢。。。

使用特权

评论回复
6
123de7| | 2013-11-2 23:12 | 只看该作者
       LZ 好人啊

使用特权

评论回复
7
irundream| | 2013-11-3 09:56 | 只看该作者
厉害,期待这个很久了。

使用特权

评论回复
8
生无所息1| | 2013-11-3 15:50 | 只看该作者

使用特权

评论回复
9
laoxu|  楼主 | 2013-11-3 17:39 | 只看该作者
呵呵~~~

花了俺半天时间呢~~~ :P

希望童鞋们能用的着, 否则白辛苦一场~~~ :'(

使用特权

评论回复
10
徐晓笨| | 2013-11-4 08:50 | 只看该作者

使用特权

评论回复
11
henryyam| | 2013-11-4 11:01 | 只看该作者
太感谢了!:handshake

使用特权

评论回复
12
qzwx741| | 2013-11-5 19:37 | 只看该作者
大牛许工你好,下载学习,谢谢

使用特权

评论回复
13
Dick00| | 2013-11-6 10:57 | 只看该作者
厉害,以后自己搞了也参考下

使用特权

评论回复
14
yizhiyu| | 2013-11-6 21:06 | 只看该作者
我也在做类似的事,在M051上修改或增加有关的寄存器信息。原来早就有人做了,先下来看看。谢谢,楼主辛苦了!

使用特权

评论回复
15
hxjlm| | 2013-11-11 09:22 | 只看该作者
谢谢分享!

使用特权

评论回复
16
szjosun| | 2013-11-11 10:11 | 只看该作者
谢谢分享!

使用特权

评论回复
17
cdlxzlp520| | 2013-11-12 10:17 | 只看该作者
这个是 一定要支持的了!!

使用特权

评论回复
18
niuyaliang| | 2013-11-26 17:38 | 只看该作者
确实方便多了

使用特权

评论回复
19
zhangjin_comeon| | 2013-11-26 23:13 | 只看该作者
这个不错

使用特权

评论回复
20
leo_z| | 2013-12-26 18:05 | 只看该作者
下载使用中

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:猜猜俺是谁的马夹?

146

主题

2274

帖子

221

粉丝