zephyr学习笔记---CC3200---跑马灯

来源:互联网 发布:二维动画软件大全 编辑:程序博客网 时间:2024/06/07 08:15

CC3200 LaunchXL到货,先上图


ARM M4内核并集成一块WIFI芯片,不过板上没啥东西,比CC2650DK和CC2650 SensorTag差太远。也不需要太复杂,能用基本的东西就行了。

这块板该从哪个地方开始学?一头雾水,先从zephyr自带的例子开始吧,又搞了好长时间,终于把例程\samples\basic\blinky编译完成,并烧到了开发板上,点亮了一个绿灯。但这样的开发板,怎么也要弄个跑马灯来玩玩吧。然后各种研究,终于很痛苦地发现,移植做得很简单,仅可以使用两个按钮和一个LED灯。这打击。。。。

200多大洋不能浪费啊,只能自力更生,艰苦奋斗。看来还得把CCS装回来,两边对照着做。终过一番折腾,总算是把跑马灯做出来了。虽然简单,也算是一个好的开头。

第一件事,先完善board.h头文件,它位于\boards\arm\cc3200_launchxl文件夹下。
参照CC3200的《Technical Reference Manual》,找到board.h的规律。CC3200的GPIO口被分成了四组:
  • GPIO Port A0: 0x4000.4000
  • GPIO Port A1: 0x4000.5000
  • GPIO Port A2: 0x4000.6000
  • GPIO Port A3: 0x4000.7000
每个端口包含8个GPIO,先来看看三个LED连接的是哪个GPIO,查电路原理图:


三个LED分别接GPIO_09、GPIO_10、GPIO_11口,接下来查三个GPIO属于哪个端口:


可以看到9、10、11三个GPIO口都属于A1端口,编号分别为1、2、3

查看board.h代码,找到规律:LEDx_GPIO_PORT表示的是第几个端口,这里用“GPIO_A1”表示GPIO Port A1端口。而LEDx_GPIO_PIN表示此GPIO口所对应的编号。这时我们就可以把别两个LED灯加进board.h了。更改代码如下:
[cpp] view plain copy
  1. #ifndef __INC_BOARD_H  
  2. #define __INC_BOARD_H  
  3.   
  4. /* Push button switch 2 */  
  5. #define SW2_GPIO_PIN    6    /* GPIO22/Pin15 */  
  6. #define SW2_GPIO_NAME   "GPIO_A2"  
  7.   
  8. /* Push button switch 3 */  
  9. #define SW3_GPIO_PIN    5    /* GPIO13/Pin4 */  
  10. #define SW3_GPIO_NAME   "GPIO_A1"  
  11.   
  12. /* Push button switch 0: Map to SW2 so zephyr button example works */  
  13. #define SW0_GPIO_PIN    SW2_GPIO_PIN  
  14. #define SW0_GPIO_NAME   SW2_GPIO_NAME  
  15.   
  16. /* Onboard GREEN LED */  
  17. #define LED0_GPIO_PIN   3  /*GPIO11/Pin2 */  
  18. #define LED0_GPIO_PORT  "GPIO_A1"  
  19.   
  20. /*Onboard ORANGE LED */  
  21. #define LED1_GPIO_PIN   2  /*GPIO10/Pin1 */  
  22. #define LED1_GPIO_PORT  "GPIO_A1"  
  23.   
  24. /*Onboard RED LED */  
  25. #define LED2_GPIO_PIN   1  /*GPIO9/Pin0 */  
  26. #define LED2_GPIO_PORT  "GPIO_A1"  
  27.   
  28. #endif /* __INC_BOARD_H */  

接下来在zephyr目录(默认是zephyr-project目录,我的是zephyr-1.7.0目录)下新建一文件夹appDir,将\samples\basic\blinky文件夹拷贝到appDir下,改名为marqueeLED。进去打开src文件夹,将main.c代码更改如下:

[cpp] view plain copy
  1. #include <zephyr.h>  
  2. #include <board.h>  
  3. #include <device.h>  
  4. #include <gpio.h>  
  5.   
  6. /* Change this if you have an LED connected to a custom port */  
  7. #define PORT    LED0_GPIO_PORT  
  8.   
  9. /* Change this if you have an LED connected to a custom pin */  
  10. #define LED0    LED0_GPIO_PIN  
  11. #define LED1    LED1_GPIO_PIN  
  12. #define LED2    LED2_GPIO_PIN  
  13.   
  14. /* 1000 msec = 1 sec */  
  15. #define SLEEP_TIME  200  
  16.   
  17. void main(void)  
  18. {  
  19.     struct device *dev;  
  20.   
  21.     dev = device_get_binding(PORT);  
  22.     /* Set LED pin as output */  
  23.     gpio_pin_configure(dev, LED0, GPIO_DIR_OUT);  
  24.     gpio_pin_configure(dev, LED1, GPIO_DIR_OUT);  
  25.     gpio_pin_configure(dev, LED2, GPIO_DIR_OUT);  
  26.   
  27.     while (1) {  
  28.         /* Set pin to HIGH/LOW every 1 second */  
  29.         gpio_pin_write(dev, LED2, 0);  
  30.         gpio_pin_write(dev, LED0, 1);  
  31.         k_sleep(SLEEP_TIME);  
  32.         gpio_pin_write(dev, LED0, 0);  
  33.         gpio_pin_write(dev, LED1, 1);  
  34.         k_sleep(SLEEP_TIME);  
  35.         gpio_pin_write(dev, LED1, 0);  
  36.         gpio_pin_write(dev, LED2, 1);  
  37.         k_sleep(SLEEP_TIME);  
  38.     }  
  39. }  
打开终端,依次输入如下命令:
export ZEPHYR_GCC_VARIANT=zephyr
export ZEPHYR_SDK_INSTALL_DIR=~/zephyr-sdk
cd zephyr-1.7.0/
source zephyr-env.sh
cd appDir/marqueeLED
make BOARD=cc3200_launchxl
如下图所示:

编译成功后,在outdir/cc3200_launchxl文件夹下找到zephyr.bin文件。将其拷贝到windows操作系统。将其烧写进开发板。这里需要使用TI公司的UniFlash进行烧写,详细的过程请参考阿汤哥博客:
http://www.cnblogs.com/hytgab/p/5202142.html
写得非常详细,非常好,我就不重复了。烧写过程比较麻烦,还得拔插跳线。坑爹啊,这以后要调试程序,会非常麻烦。