本帖最后由 妈妈跟我说名字 于 2013-1-17 19:13 编辑
库文件很庞大,函数很多,宏定义也很多,要弄清楚这些很难,所以,可以重例子入手分析之间的关系。 ATMEl Studio 自带的例程中可以找到一些关于开发板SAM4S的一些例子。 第一步:New Example Project From ASF,然后按下面选择
点开红线里面的选项,发现有很多SAM4s的例子,选择 Commo Delay Service Example,然后建立好工程。 在delay_example.c文件中有如下代码。 int main(void) { sysclk_init(); board_init();
while (true) { for (int i = 0; i < 5; i++) { gpio_toggle_pin(LED0_GPIO); delay_s(1); }
for (int i = 0; i < 50; i++) { gpio_toggle_pin(LED0_GPIO); delay_ms(100); }
for (int i = 0; i < 5000; i++) { gpio_toggle_pin(LED0_GPIO); delay_us(100); } } } 找到函数,gpio_toggle_pin(LED0_GPIO);的出处;可以找到如下代码 #define gpio_toggle_pin(io_id) \ pio_toggle_pin(io_id) 然后找到 pio_toggle_pin(io_id) 函数。如下 void pio_toggle_pin(uint32_t ul_pin) { Pio *p_pio = (Pio *)((uint32_t)PIOA + (PIO_DELTA * (ul_pin >> 5))); if (p_pio->PIO_ODSR & (1 << (ul_pin & 0x1F))) { // Value to be driven on the I/O line: 0. p_pio->PIO_CODR = 1 << (ul_pin & 0x1F); } else { // Value to be driven on the I/O line: 1. p_pio->PIO_SODR = 1 << (ul_pin & 0x1F); } } 可以找到PIO_ODSR等的定义,明白代表什么寄存器。 第一句是定义一个Pio的类,可以找到这个类的定义。 这样,对GPIO的操作基本上就可以自己利用库文件来完成了。也可以不用API函数,自己来完成,加了如下代码来完成对LED1灯的点亮。
int main(void) { sysclk_init(); board_init(); Pio *p_pio1 = (Pio *)((uint32_t)PIOA + (PIO_DELTA * (LED1_GPIO >> 5))); //自己加的。 p_pio1->PIO_CODR = 1 << (LED1_GPIO& 0x1F);//自己加的。
while (true) { for (int i = 0; i < 5; i++) { gpio_toggle_pin(LED0_GPIO); delay_s(1); }
for (int i = 0; i < 50; i++) { gpio_toggle_pin(LED0_GPIO); delay_ms(100); }
for (int i = 0; i < 5000; i++) { gpio_toggle_pin(LED0_GPIO); delay_us(100); } } }
然后下载到板子上运行就可以了。 看到LED1灯亮了有木有一种愉悦的感觉。还依稀记得当年学单片机的情形,点亮第一颗LED灯激动的心情。 很简单,但是分析了好几天,主要是库文件太多,还有大量的宏定义,搞得一头雾水,一开始不知道有自带的例程,后来发现了就看了例程分析了下,清晰多了。 这种方法大家可以借鉴下,我看了下,总共有60多个例程,只要能都搞清楚了,我相信这款芯片也就差不多了。当年学MSP430的时候也是这样学的。 在用例程的时候发现一些问题。 一开始我新建的例程是像下面这样建立的
找到自己的板子,然后选择,但是当你工程建立好了,一编译就会出现很多错误,我找了一天的错误原因,本人水平有限,这个毕竟是ATMEl的工程师写的东西,我不敢妄下定论。
如果有高手找出来了希望能跟告诉我一下,共同进步嘛。 然后说说怎么将程序下载到板子上的问题。 有一种简单的方法就是用atmel studio ,很方便,可以自己在线调试,也可以直接下载到板子上,这个可以自己尝试,前面也有人发过了帖子。 还有就是用j-link ARM下载,先要打开对应的配置好的工程,对应的工程可以在安装目录里面找到。 找到对应的工程打开,然后Fiel-open data file 打开你编译好的文件,hex和bin好像都可以吧,然后target – connect然后auto就可以了,相信这个大家都用过我就不再多说了。 还有一种就是利用SAM-BA,这个其实也挺方便的,而且有自带帮助文档,可以看看,就不在赘述了。 放假在家,没有网,发帖不是很方便,希望大家多支持,这几天去搞一个月的无线网,这样就方便学习,发帖,以及跟大家的交流。 |