刚从沈阳出差回来,终于看到心仪已久的板子了,太兴奋了。哈哈哈
学TI的ARM有段时间了,总感觉操作I/O不方便,写起来字太多,累得慌。没事的时候就研究了一下寄存器和驱动库的代码,
总算找到一种比较方便的操作方式,和51操作差不多了,呵呵。废话不错说了,先看代码吧:
#define RA(x) HWREGBITW(0x400043FC,x)
#define RB(x) HWREGBITW(0x400053FC,x)
#define RC(x) HWREGBITW(0x400063FC,x)
#define RD(x) HWREGBITW(0x400073FC,x)
#define RE(x) HWREGBITW(0x400243FC,x)
#define RF(x) HWREGBITW(0x400253FC,x)
#define RG(x) HWREGBITW(0x400263FC,x)
利用BIT的操作方法HWREGBITW(),效率比较高,里面的地址可以在芯片里的头文件中找到:
#define GPIO_PORTA_DATA_R (*((volatile unsigned long *)0x400043FC))
这是引用的lm3s8962.h文件里面的一段,我们只需要后面的16进制地址就可以了,然后后面的操作就简单多了。
比如我们想点亮一个LED,在PF0上,那么我们就这样
int main(void)
{
clockInit(); // 时钟初始化:晶振,6MHz
SysCtlPeriEnable(SYSCTL_PERIPH_GPIOF); //使能
GPIOPinTypeOut(PORTF,PIN0); //端口方向
for (;;)
{
RF(0) = 1;
SysCtlDelay(150 * (TheSysClock / 3000));
RF(0) = 0;
SysCtlDelay(150 * (TheSysClock / 3000));
}
}
简单多了吧,特别是从51,pic,avr转型过来的朋友们是不是觉得很亲切呢,呵呵。
可能细心的朋友们已经察觉到了,在设置端口方向的那句怎么不对呢,没有声明啊,呵呵我又偷懒了
#define PORTA 0x40004000 // GPIO Port A
#define PORTB 0x40005000 // GPIO Port B
#define PORTC 0x40006000 // GPIO Port C
#define PORTD 0x40007000 // GPIO Port D
#define PORTE 0x40024000 // GPIO Port E
#define PORTF 0x40025000 // GPIO Port F
#define PORTG 0x40026000 // GPIO Port G
#define PORTH 0x40027000 // GPIO Port H
#define PIN0 0x00000001 // GPIO pin 0
#define PIN1 0x00000002 // GPIO pin 1
#define PIN2 0x00000004 // GPIO pin 2
#define PIN3 0x00000008 // GPIO pin 3
#define PIN4 0x00000010 // GPIO pin 4
#define PIN5 0x00000020 // GPIO pin 5
#define PIN6 0x00000040 // GPIO pin 6
#define PIN7 0x00000080 // GPIO pin 7
这样是不是省劲多了,看着也舒服点
下面有我的附件,给喜欢的朋友参考一下