Contiki-CC2538-AD/GPIO/LED驱动程序
来源:互联网 发布:淘宝卖游戏币赚钱吗 编辑:程序博客网 时间:2024/05/19 15:43
正在学习contiki操作系统,用了一块CC2538的片子来实验,环境是直接使用的Contiki提供的虚拟机,这个程序不讲述关于contiki,直接阐述如何编写一个使LED闪烁,将一个管脚电平置位,并且读取一路ADC通道的值
1.准备工作
我使用的是6lbr,这里和使用Contiki-3.0 没影响。
首先找到我们的例子程序
/home/user/6lbr/examples/cc2538dk
路径你们就将6lbr变成Contiki-3.0就好。
首先我们新建一个test.c文件,用来写我们的例程。然后进入到Makefile里面,做如下修改,就是在后面加上了test。
CONTIKI_PROJECT = cc2538-demo test
好了,准备工作就这么点,由于是使用了CC2538的例程,平台也不用指定,当然如果你使用其他平台,就是在make后面加上TARGET=XXX就好,也可以在这个 Makefile.target 文件里做修改。
2 头文件
#include "contiki.h"#include "dev/leds.h"#include "dev/adc.h"#include "dev/gpio.h"#include <stdio.h>
adc和gpio的文件放在了cpu/cc2538/dev里面,而leds.h则放在了core/dev里面,需要啥功能就去你们找就好了。 - -|
3 全局量、声明、自启动
就是定义了一些全局变量,然后声明了3个线程,让他们开机自动启动运行。
static struct etimer timera;//线程定时器static struct etimer timerb;static struct etimer timer_adc;static int adcval= 0;//保存ADC读取的原始值//申明PROCESS(hello,"Hello");PROCESS(blink,"Blink");PROCESS(getadc,"Getadc");//自启动AUTOSTART_PROCESSES(&hello,&blink,&getadc);
4 串口输出线程
//线程1:用于串口输出PROCESS_THREAD(hello,ev,data){ PROCESS_BEGIN(); //延时2S,两秒后会发送一个超时事件 etimer_set(&timera,CLOCK_SECOND*2); //使用该线程测试管脚 //这里是用来测试gpio封装的函数是不是能用 //这里的0X04表示PA3管脚,就是第三位为1(0000 0100) //GPIO_SET_PIN(GPIO_A_BASE,0x04);//拉高PA3管脚 GPIO_SET_OUTPUT(GPIO_A_BASE,0x08); GPIO_CLR_PIN(GPIO_A_BASE,0X08); while(1) { //等待超时时间发生 PROCESS_WAIT_EVENT(); if(ev == PROCESS_EVENT_TIMER) { printf("ADC : %d",adcval); //重新开始计数 etimer_reset(&timera); } } PROCESS_END();}
管脚控制的那些函数在gpio.c里面可以看到
例如下图:
5 LED闪烁线程
同样,这里也是使用了leds.c里面封装好了的函数
//线程2:用于LED闪烁PROCESS_THREAD(blink,ev,data){ PROCESS_BEGIN(); while(1) { etimer_set(&timerb,CLOCK_SECOND); PROCESS_WAIT_EVENT_UNTIL(ev == PROCESS_EVENT_TIMER); leds_toggle(LEDS_ALL);//翻转电平 etimer_reset(&timerb); } PROCESS_END();}
函数也可以在core/dev/leds.c中看到,随机截图如下:
6 ADC读取线程
使用了cpu/cc2538/dev/adc.c中封装的函数。
//线程3:用于AD读取PROCESS_THREAD(getadc,ev,data){ PROCESS_BEGIN(); adc_init(); //ad初始化 while(1) { etimer_set(&timer_adc,CLOCK_SECOND); PROCESS_WAIT_EVENT_UNTIL(ev ==PROCESS_EVENT_TIMER); //读取ad值 使用了PA2通道 adcval = adc_get(SOC_ADC_ADCCON_CH_AIN2,SOC_ADC_ADCCON_REF_INT,SOC_ADC_ADCCON_DIV_512); etimer_reset(&timer_adc); } PROCESS_END();}
SOC_ADC_ADCCON_CH_AIN2这些定义可以在同文件夹下的soc-adc.h中看到定义。
7 下载运行
将目前返回到
~/6lbr/examples/cc2538dk$
就是我们建立test.c的那个文件夹下。
然后执行
make test
他就会自动编译,没有错误的话就会在当前文件夹下生成一个test.hex
将他复制到windows下,打开Flash Programmer 2,插上你的JTAG下载器。左边选择芯片,右边选择文件,打上那三个勾。点“播放”。这些就没啥好说的了。
刚学习,写的一个简单例程,在这儿记录一下。
- Contiki-CC2538-AD/GPIO/LED驱动程序
- 嵌入式Linux LED,键盘,AD驱动程序开发
- cc2538平台下的Contiki基本试验
- Eclipse+WIN7+CC2538移植开发Contiki
- 混杂设备LED驱动程序(GPIO操作函数实现)
- AD驱动程序
- LED驱动程序
- LED驱动程序
- LED 驱动程序
- linux下,基于cc2538的contiki平台搭建
- cc2538在contiki系统的串口数据输…
- STM32 GPIO LED实验
- (one) GPIO和LED
- Android GPIO LED
- GPIO控制led亮暗
- 4、RIOT操作系统中 CC2538的编译和GPIO
- Contiki 3.0: GPIO操作
- CC2538 CONTIKI测试开始 初步驱动改写 Contiki真的测试过了2538dk了吗?
- 只有点击按钮才能关闭AlterDialog
- ZWAVE Door Lock Configuration Set
- ASP Form 下 rpt控件分页实现
- 10分钟搞定kettle源码部署
- Android UI模板设计案例
- Contiki-CC2538-AD/GPIO/LED驱动程序
- Hadoop2.6.4伪分布式环境搭建
- android基础_第十一天
- Python之抓取html中的手机号
- iPhone 上的沙箱文件管理器 Filza File Manager(越狱下安装破解)
- Java 脚本化编程指南
- C# Selenium 读取本地Excel文件并测试
- Android记录单点和多点触控的位置
- android 开发输出日志打印信息