CSR1010蓝牙开发I/O操作
2016-07-26 19:06
1046 查看
CSR1010开发前期准备
1.开发环境CSR uEnergy SDK 2.5.1
2.硬件准备keyfob蓝牙开发板,USB-SPI下载器
CSR1010 I/O开发须知:
关于I/O操作的函数库被定义在头文件<pio.h>中,查阅函数库我们需要用到一下几个函数:
1、设置引脚模式,我们需要将其设为user模式。
每次产生事件都会调用下面的系统函数来对事件进行响应,其具体操作由开发者编写。
void AppProcessSystemEvent(sys_event_id id, void *data)
5、使用CSR uEnergy SDK进行开发时,没有main()函数,代码先执行void AppPowerOnReset(void),然后执行void AppInit(sleep_state last_sleep_state)进行初始化工作,之后由系统事件触发执行void AppProcessSystemEvent(sys_event_id id, void *data)和bool AppProcessLmEvent(lm_event_code event_code, LM_EVENT_T *event_data)。
示例代码如下:
#include <main.h>
#include <pio.h>
#include <ls_app_if.h>
#define PIO_BUTTON 11
#define PIO_LED0 10
#define PIO_LED1 4
#define PIO_DIR_OUTPUT TRUE
#define PIO_DIR_INPUT FALSE
void AppPowerOnReset(void)
{
}
void AppInit(sleep_state last_sleep_state)
{
PioSetModes((1UL << PIO_LED0) | (1UL << PIO_LED1), pio_mode_user);
PioSetDir(PIO_LED0, PIO_DIR_OUTPUT);
PioSetDir(PIO_LED1, PIO_DIR_OUTPUT);
PioSetPullModes((1UL << PIO_LED0) | (1UL << PIO_LED1), pio_mode_strong_pull_up);
PioSetMode(PIO_BUTTON, pio_mode_user);
PioSetDir(PIO_BUTTON, PIO_DIR_INPUT);
PioSetPullModes((1UL << PIO_BUTTON), pio_mode_weak_pull_up);
PioSetEventMask((1UL << PIO_BUTTON), pio_event_mode_both);
}
void AppProcessSystemEvent(sys_event_id id, void *data)
{
if (id == sys_event_pio_changed)
{
const pio_changed_data *pPioData = (const pio_changed_data *)data;
if (pPioData->pio_cause & (1UL << PIO_BUTTON) )
{
if (pPioData->pio_state & (1UL << PIO_BUTTON))
{
PioSets((1UL << PIO_LED0) | (1UL << PIO_LED1), 0xffffUL);
}
else
{
PioSets((1UL << PIO_LED0) | (1UL << PIO_LED1), 0UL);
}
}
}
}
bool AppProcessLmEvent(lm_event_code event_code, LM_EVENT_T *event_data)
{
return TRUE;
}
1.开发环境CSR uEnergy SDK 2.5.1
2.硬件准备keyfob蓝牙开发板,USB-SPI下载器
CSR1010 I/O开发须知:
关于I/O操作的函数库被定义在头文件<pio.h>中,查阅函数库我们需要用到一下几个函数:
1、设置引脚模式,我们需要将其设为user模式。
void PioSetModes (uint32 mask, pio_mode mode)2、设置方向,分为输入和输出,这里我们需要将button引脚设置为输入,led引脚设置为输出。
void PioSetDir (uint16 pio, bool output)3、设置电流相关,对于led引脚需要设置为允许大电流模式,button引脚设置为弱电流模式。
void PioSetPullModes (uint32 mask, pio_pull_mode mode)4、设置I/O产生相关事件,此处使用sys_event_pio_changed事件。
void PioSetEventMask (uint32 mask, pio_event_mode mode)
每次产生事件都会调用下面的系统函数来对事件进行响应,其具体操作由开发者编写。
void AppProcessSystemEvent(sys_event_id id, void *data)
5、使用CSR uEnergy SDK进行开发时,没有main()函数,代码先执行void AppPowerOnReset(void),然后执行void AppInit(sleep_state last_sleep_state)进行初始化工作,之后由系统事件触发执行void AppProcessSystemEvent(sys_event_id id, void *data)和bool AppProcessLmEvent(lm_event_code event_code, LM_EVENT_T *event_data)。
示例代码如下:
#include <main.h>
#include <pio.h>
#include <ls_app_if.h>
#define PIO_BUTTON 11
#define PIO_LED0 10
#define PIO_LED1 4
#define PIO_DIR_OUTPUT TRUE
#define PIO_DIR_INPUT FALSE
void AppPowerOnReset(void)
{
}
void AppInit(sleep_state last_sleep_state)
{
PioSetModes((1UL << PIO_LED0) | (1UL << PIO_LED1), pio_mode_user);
PioSetDir(PIO_LED0, PIO_DIR_OUTPUT);
PioSetDir(PIO_LED1, PIO_DIR_OUTPUT);
PioSetPullModes((1UL << PIO_LED0) | (1UL << PIO_LED1), pio_mode_strong_pull_up);
PioSetMode(PIO_BUTTON, pio_mode_user);
PioSetDir(PIO_BUTTON, PIO_DIR_INPUT);
PioSetPullModes((1UL << PIO_BUTTON), pio_mode_weak_pull_up);
PioSetEventMask((1UL << PIO_BUTTON), pio_event_mode_both);
}
void AppProcessSystemEvent(sys_event_id id, void *data)
{
if (id == sys_event_pio_changed)
{
const pio_changed_data *pPioData = (const pio_changed_data *)data;
if (pPioData->pio_cause & (1UL << PIO_BUTTON) )
{
if (pPioData->pio_state & (1UL << PIO_BUTTON))
{
PioSets((1UL << PIO_LED0) | (1UL << PIO_LED1), 0xffffUL);
}
else
{
PioSets((1UL << PIO_LED0) | (1UL << PIO_LED1), 0UL);
}
}
}
}
bool AppProcessLmEvent(lm_event_code event_code, LM_EVENT_T *event_data)
{
return TRUE;
}
相关文章推荐
- Mysql IO 内存方面的优化
- Node.js 的异步 IO 性能探讨
- SQL Server误区30日谈 第22天 资源调控器可以调控IO
- mysql 数据同步 出现Slave_IO_Running:No问题的解决方法小结
- java中的Io(input与output)操作总结(一)
- GO语言的IO方法实例小结
- java中的Io(input与output)操作总结(四)
- C#路径,文件,目录及IO常见操作汇总
- SQL语句实现查询当前数据库IO等待状况
- Android蓝牙开发深入解析
- Java进阶教程之IO基础
- java中的Io(input与output)操作总结(三)
- Java 1.0和Java 1.1 的IO类的比较
- Java中的BufferedInputStream与BufferedOutputStream使用示例
- JAVA IO API使用详解
- Java NIO和IO的区别
- Java编程中最基础的文件和目录操作方法详解
- Python中使用select模块实现非阻塞的IO
- Python通过poll实现异步IO的方法
- Python通过select实现异步IO的方法