文章转载参考:http://blog.sina.com.cn/s/articlelist_5617273496_0_1.html
BLE:CC2540与CC2541相关寄存器一览
一、关于普通IO操作:
1.外部IO端口可以通过SFR寻址,如:P1_0 = 1;P1_3 = 0;
2.PxSEL:功能选择寄存器,如:P1SEL |= 1 << 0;P1SEL &= ~(1 << 1);
3.PxDIR:输入输出控制寄存器;
4.PxINP:输入模式控制寄存器;0:上下拉;1:三态;(P1.0,P1.1没有上下拉功能);
二、关于IO外部中断操作(端口0):
1.P0IEN:中断屏蔽寄存器:1为使能
2.PICTL:中断边沿选择寄存器:1为输入下降沿触发
3.P0IFG:中断标志位寄存器;
4.IEN1:中断使能:1为使能、如:IEN1 |= 0x20;//允许P0口中断
三、定时器1相关(16位):
1.T1CTL:定时器控制寄存器:设置分频器以及定时器模式
2.T1TAT:定时器状态寄存器:中断标志通道选择,计数器溢出中断标志
3.IRCON:中断标志寄存器:1,有中断请求,需要软件清零;
四、定时器3,4相关(8位):
1.TxCTL:定时器控制寄存器:分频选择,起止控制,溢出中断掩码,清计数器,模式选择;
2.TxCTL0:通道0捕获/比较控制器:
3.TxCC0:通道0捕获/比较值寄存器:
4.TxCTL1:通道1捕获/比较控制器:
5.TxCC1:通道1捕获/比较值寄存器:
五、串口相关:
1.PERCFG:外部IO控制寄存器:设置映射到不同IO口上去的功能;
2.P2DIR高2位:用于设定串口以及定时器优先级;
3.UxCSR:串口状态及控制寄存器
4.UxGCR:串口一般控制寄存器
5.UxBAUD:串口波特率寄存器
6.UTXxIF:串口接收中断标志寄存器
7.IENx:中断使能
8.UxDBUF:串口接收发送数据缓冲寄存器
六、CPU及时钟相关:
1.CLKCONCMD:时钟控制寄存器;
2.SLEEPCMD:休眠模式控制寄存器;
3.PCON;PCON = 1;进入低功耗模式;
PCON = 0;退出低功耗模式;
4.ST0~ST2:睡眠时间计数器;
5.STIE:睡眠中断使能;
6.STIF:睡眠中断标志;
七、ADC相关:
1.ADCCON1~3:ADC控制寄存器;
其他:
1.TR0:TR0 = 1;用于设置连接片上温度传感器
2.ATEST
:模拟测试寄存器
3.WDCTL:看门狗寄存器相关
BLE:OSAL API接口
一、消息管理API:
1.分配消息空间函数:len消息空间长度;返回空间首地址指针
uint8 * osal_msg_allocate( uint16 len )
2.发送消息到消息队列:destination_task:接收端的任务ID,*msg_ptr:消息内容指针;
uint8 osal_msg_send( uint8 destination_task, uint8 *msg_ptr )
3.接收消息队列的消息:返回:消息内容指针;task_id:对应任务ID
uint8 *osal_msg_receive( uint8 task_id )
4.销毁消息空间函数:返回:成功或失败原因;*msg_ptr:消息空间指针;
uint8 osal_msg_deallocate( uint8 *msg_ptr )
二、任务同步API:
1.启动事件函数:返回:成功或失败原因;task_id:任务ID;event_flag:事件标志
uint8 osal_set_event( uint8 task_id, uint16 event_flag )
2.延时启动函数:返回:成功或失败原因;taskID:需设置延时的任务ID;event_id:需等待事件ID;timeout_value:延时ms
uint8 osal_start_timerEx( uint8 taskID, uint16 event_id, uint32 timeout_value )
3.延时关闭函数:返回:成功或失败原因;taskID:需设置延时的任务ID;event_id:关闭等待事件ID;
uint8 osal_stop_timerEx( uint8 task_id, uint16 event_id )
三、内存管理API:
1.动态分配内存函数:size:大小;返回分配内存指针;
void *osal_mem_alloc( uint16 size )
2.释放动态内存函数:*ptr:待释放动态内存指针;
void osal_mem_free(void *ptr)
四、FLASH管理API:
1.FLASH写入函数:返回:成功或失败原因;id:存储数据标识ID,len:存储长度,*pBuf 存储数据域指针
uint8 osal_snv_write( osalSnvId_t id, osalSnvLen_t len, void *pBuf )
2.FLASH读出函数:返回:成功或失败原因;id:存储数据标识ID,len:读出长度*pBuf:读出存放数据域指针
uint8 osal_snv_read( osalSnvId_t id, osalSnvLen_t len, void *pBuf )
BLE:GAP之角色配置
一,GAP外围设备角色配置:
1)GAP外围角色配置相关函数:
1.bStatus_t GAPRole_GetParameter( uint16 param, void *pValue )
2.bStatus_t GAPRole_SetParameter( uint16 param, uint8 len, void *pValue )
2)常用param参数相关选项:
1.GAPROLE_ADVERT_ENABLED:使能广播,Value = 使能/不使能
2.GAPROLE_ADVERT_DATA:向外广播的数据,Value = 要广播的数据
3.GAPROLE_SCAN_RSP_DATA:回应扫描请求的响应数据:Value = 要回应扫描的数据
4.GAPROLE_ADVERT_OFF_TIME:广播一段时间后未被发现则停止广播:Value = 时间1ms单位
5.GAPROLE_PARAM_UPDATE_ENABLE:连接失败自动调整连接参数:Value = 使能/不使能
6.GAPROLE_MIN_CONN_INTERVAL:最小连接间隙:Value = X个单位1.25ms;
7.GAPROLE_MAX_CONN_INTERVAL:最大连接间隙:Value = X个单位1.25ms;
8.GAPROLE_SLAVE_LATENCY:跳过次数:Value = 次数;
9.GAPROLE_TIMEOUT_MULTIPLIER:最大等待时间:Value = X个单位10ms;大于6次被扫描的机会;
3)以上设置完成后:
VOID GAPRole_StartDevice(&回调函数);
4)gapRolesCBs_t
函数指针结构体内容:
函数指针:pfnStateChange:GAP状态改变是被底层调用
函数指针:pfnRssiRead:每次读RSSI值时被调用
二,GAP外围/广播多重角色配置:
1)将peripheral.c和.h文件移出工程,加入peripheralBroadcaster.c和.h文件参与编译;
三,GAP中央设备角色配置:
1)角色配置相关函数:
bStatus_t GAPCentralRole_SetParameter( uint16 param, uint8 len, void *pValue )
bStatus_t GAPCentralRole_GetParameter( uint16 param, void *pValue )
2)
常用param参数相关选项:
1.GAPCENTRALROLE_MAX_SCAN_RES:最大扫描回应数量个数:Value = 个数;
3)设置完参数调用:
VOID GAPCentralRole_StartDevice( &回调函数 );
4)gapCentralRoleCB_t函数指针结构体内容:
rssiCB:读RSSI时调用;
eventCB:当扫描到设备,建立连接或者断开时底层调用;
BLE:GAP之绑定管理的配置
一、相关配置函数:
GAPBondMgr_SetParameter( uint16 param, uint8 len, void *pValue );
GAPBondMgr_GetParameter( uint16 param, void *pValue );
二、param可选常用参数:
1.GAPBOND_PAIRING_MODE:是否允许配对;Value = 1.不允许2.等待中央设备请求再配对3.自己初始化配对
2.GAPBOND_MITM_PROTECTION:安全管理是否需要人为参与;Value = 使能/不使能
3.GAPBOND_IO_CAPABILITIES:设置设备的输入输出特性;Value = 见gapbondmgr头文件
4.GAPBOND_BONDING_ENABLED:使能绑定:Value = 使能/不使能
5.GAPBOND_DEFAULT_PASSCODE:默认密码:Value = 32bit二进制
三、在init中配置好以上配置选项后,在第一次启动事件时调用
GAPBondMgr_Register( &回调函数);
四、gapBondCBs_t函数指针结构体描述:
passcodeCB 配对期间有认证请求调用 应用程序产生密码
pairStateCB 配对状态改变时调用
BLE:GATT之简单属性配置文件
一、属性配置表
gattAttribute_t
:
1.type:属性类型;
2.permissions:属性许可;
3.handle:属性句柄;
4.Value:属性值;
二、相关函数:
1.初始化Simple Profile服务:
bStatus_t SimpleProfile_AddService( uint32 services )
具体作用:添加GATT属性列表,初始化客户端配置,注册服务器应用程序读写特性值回调函数和连接状态改变回调函数;
2.代入特性值ID,设置相应特性值:
bStatus_t SimpleProfile_SetParameter( uint8 param, uint8 len, void *value )
3.代入特性值ID,获取相应特性值:
bStatus_t SimpleProfile_GetParameter( uint8 param, void *value )
4.注册特性值改变回调函数:
bStatus_t SimpleProfile_RegisterAppCBs( simpleProfileCBs_t *appCallbacks )
5.pfnSimpleProfileChange:
6.当客户端尝试读
属性配置文件时,回调:
uint8 simpleProfile_ReadAttrCB( uint16 connHandle, gattAttribute_t *pAttr,
uint8 *pValue, uint8 *pLen, uint16 offset, uint8 maxLen )
7.当客户端尝试写属性配置文件时,回调:
bStatus_t simpleProfile_WriteAttrCB( uint16 connHandle, gattAttribute_t *pAttr,
uint8 *pValue, uint8 len, uint16 offset )
8.注册到连接管理数据库,连接状态发生任何改变时;回调;
void simpleProfile_HandleConnStatusCB( uint16 connHandle, uint8 changeType )
BLE:简单按键配置文件
1.初始化simple profile服务;
bStatus_t SK_AddService( uint32 services )
添加GATT服务器属性表、初始化客户端配置、注册服务器应用程序读写以及连接状态回调函数;
2.设置按键状态
bStatus_t SK_SetParameter( uint8 param, uint8 len, void *pValue )
3.获取按键状态
bStatus_t SK_GetParameter( uint8 param, void *pValue )
4.客户端读配置文件属性时回调函数,由AddService中注册:
uint8 sk_ReadAttrCB( uint16 connHandle, gattAttribute_t *pAttr,
uint8 *pValue, uint8 *pLen, uint16 offset, uint8 maxLen )
5.客户端写配置文件属性时回调函数,
bStatus_t sk_WriteAttrCB( uint16 connHandle, gattAttribute_t *pAttr,
uint8 *pValue, uint8 len, uint16 offset )
BLE:CC254x协议栈预处理宏以及其意义
一,必选宏
1.INT_HEAP_LEN: 初始化堆大小;
2.HALNODEBUG: 除能硬件抽象层的调试信息;
3.OSAL_CBTIMER_NUM_TASKS:定义用于回调定时器个数;
4.HAL_AES_DMA:必须为TRUE,通过DMA通道做AES加密认证;
5.HAL_DMA:必须为TRUE,读写FLASH;
二、可选宏
1.POWER_SAVING:睡眠模式使能;
2.xPLUS_BROADCASTER:使能多重角色;
3.HAL_UART_DMA:uart接口使用dma模式;
4.HAL_UART_ISR:uart接口使用中断模式;
5.HAL_UART_ISR_RX_MAX:设置uart数据缓冲区大小;
6.HAL_UART_SPI:使能SPI驱动;
7.GAP_BOND_MGR:用于HostTestRelease网络处理器;
BLE:CC254x SimpleBLEPeripheral中函数调用
1任务初始化函数:
void SimpleBLEPeripheral_Init( uint8 task_id )
2.设置主机扫描到本设备后显示的数据:param:被设置数据域;len:设置数据域长度;*pValue:数据域内容
GAPRole_SetParameter( GAPROLE_SCAN_RSP_DATA, sizeof ( scanRspData ), scanRspData );
函数原型:bStatus_t GAPRole_SetParameter( uint16 param, uint8 len, void *pValue )
3.添加simpleProfile:
bStatus_t SimpleProfile_AddService( uint32 services )
4.注册simpleProfile回调函数:主机对从机写数据都在此函数中执行
static void simpleProfileChangeCB( uint8 paramID )
5.周期性任务开始函数:taskID:任务ID;event_id:事件ID;timeout_value:超时计时
osal_start_timerEx( simpleBLEPeripheral_TaskID, SBP_PERIODIC_EVT, SBP_PERIODIC_EVT_PERIOD );
函数原型:uint8 osal_start_timerEx( uint8 taskID, uint16 event_id, uint32 timeout_value )
6.获取特征值函数:
SimpleProfile_GetParameter( SIMPLEPROFILE_CHAR1, &newValue );
BLE:CC254x
SimpleBLECentral中函数调用
一、central中的任务初始化函数:
1.设置主设备参数函数:param:要设定参数;len:输入参数长度;pValue:值;可追;
GAPCentralRole_SetParameter( uint16 param, uint8 len, void *pValue )
2.初始化GATT Client:无入参,无出参;不可追;
GATT_InitClient();
3.注册当前任务为notify和indicate的接收端:入参:任务ID号;注册后,从机可以notify;不可追
GATT_RegisterForInd( simpleBLETaskId );
4.注册按键服务:task_id:任务ID号;返回:true/false
uint8 RegisterForKeys( uint8 task_id );
5.按键回调函数:shift:未引用参数 keys:按键方向;
static void simpleBLECentral_HandleKeys( uint8 shift, uint8 keys )
6.启动事件函数:task_id:任务ID;event_flag:任务状态标志;
uint8 osal_set_event( uint8 task_id, uint16 event_flag )
二、central中的任务处理函数:
1.消息检索函数:参数:任务ID;返回:消息信息
uint8 *osal_msg_receive( uint8 task_id )
2.处理系统消息的函数:输入参数:消息队列若为NULL则没有任务
static void simpleBLECentral_ProcessOSALMsg( osal_event_hdr_t *pMsg )
3.启动主机函数:
bStatus_t GAPCentralRole_StartDevice( gapCentralRoleCB_t *pAppCallbacks )
4.回调函数:RSSI显示回调:输入参数:RSSI,连接句柄,此处用于显示LCD,系统传参
static void simpleBLECentralRssiCB( uint16 connHandle, int8 rssi )
5.回调函数:连接事件回调:输入参数:连接事件,系统传参
static void simpleBLECentralEventCB( gapCentralRoleEvent_t *pEvent )
6.扫描从机service函数:
static void simpleBLECentralStartDiscovery( void )
7.发现私定义的UUID从机服务:输入参数:simpleBLEConnHandle:连接句柄;uuid:私有ID;ATT_BT_UUID_SIZE:UUID长度;simpleBLETaskId:私有任务ID
GATT_DiscPrimaryServiceByUUID( simpleBLEConnHandle,uuid,ATT_BT_UUID_SIZE,simpleBLETaskId );
三:系统消息处理函数
1.按键消息:
未连接按下UP:开始扫描从机函数:输入参数:mode:模式;avtiveScan:扫描模式;whitelist:白名单;
bStatus_t GAPCentralRole_StartDiscovery( uint8 mode, uint8 activeScan, uint8 whiteList );
未连接按下UP+UP:取消扫描
GAPCentralRole_CancelDiscovery();
已经连接按下UP:向从机通过WRITE方式写入到char1中一个字节,通过GATT请求,是否成功会从SYS_EVENT_MSG系统消息中得知;
status = GATT_WriteCharValue( simpleBLEConnHandle, &req, simpleBLETaskId );
2.GATT服务函数:根据读写是否成功,更改自己所需要的功能;
static void simpleBLECentralProcessGATTMsg( gattMsgEvent_t *pMsg )