CSR1010蓝牙开发I/O操作

CSR1010开发前期准备


1.开发环境CSR uEnergy SDK 2.5.1
2.硬件准备keyfob蓝牙开发板,USB-SPI下载器


CSR1010 I/O开发须知:
关于I/O操作的函数库被定义在头文件中,查阅函数库我们需要用到一下几个函数:
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 
#include 
#include 

#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;
}



你可能感兴趣的:(CSR1010蓝牙开发)