CC2430中的两个USART都支持UART(异步) 或SPI(同步)模式【所以称作USART】,模式可选。
C51RF-3CS系统是Demo Board,不是Evaluation Board,所以在工程编译选项的时候选DB而不选EB。
一、ZigBee2006协议栈演示实验的SampleApp工程
1)main函数流程
osal_int_disable( INTS_ALL );关闭所有中断,以方便初始化
HAL_BOARD_INIT();//这是一个宏。初始化板子,主要是打开32MHz时钟,关闭16MHzRC。将P1DIR寄存器的0和1位设置为1(输出模式,GPIO的输出,分别为绿灯【0】,红灯【1】)
zmain_vdd_check();//该静态函数检查,保证连续三次检测到的器件内部的工作电压VDD都大于2.0v。HalAdcVddLimit[HAL_ADC_VDD_LIMIT_4]=0x4443.
zmain_ram_init(); //初始化 调用参数栈{位于XSTACK} 和 返回(地址)栈{位于ISTACK} 为0xcd。
InitBoard( OB_COLD ); //初始化板子 I/O,关闭所有LED灯,初始化时钟服务。
HalDriverInit();//初始化HAL 的驱动,Timer、ADC、DMA、AES、LCD、LED、UART、按键初始化
osal_nv_init( NULL );//NV:Non Valitale Memory,非易失存储
zmain_ext_addr(); //extended address
zgInit();//初始化nv
ZMacInit();
osal_init_system(); //在这个函数里 初始化了任务列表,尤其是在这个函数里osalInitTasks(){每一种类型的对应于一个taskID}里调用 了SampleApp_Init( taskID );来初始化来设置地址模式,目标地址,端点等。
{// By default, all devices start out in Group 1
SampleApp_Group.ID = 0x0001;
}
在这一步完成后,操作系统初始化了, 然后允许中断。
osal_int_enable( INTS_ALL ); // Allow interrupts
InitBoard( OB_READY ); //和之前的OB_COLD形成对比,允许按键中断处理
zmain_dev_info(); //在LCD上显示设备信息
osal_start_system();启动系统,这也是 需要操作修改的部分
2) 定义const pTaskEventHandlerFn tasksArr[]用来指向不同类型任务事件,其中pTaskEventHandlerFn原型为:
typedef unsigned short (*pTaskEventHandlerFn)( unsigned char task_id, unsigned short event );
也就是tasksArr[]中的每个函数都要满足这个原型,传递的参数都是task_id和event。
// The order in this table must be identical to the task initialization calls below in osalInitTask. 也就是他们初始化的顺序是按照数组的顺序来的,如果哪个必须先初始化,就得放在前面。
const pTaskEventHandlerFn tasksArr[] = {
macEventLoop,
nwk_event_loop,
Hal_ProcessEvent,
#if defined( MT_TASK )
MT_ProcessEvent,
#endif
APS_event_loop,
ZDApp_event_loop,
SampleApp_ProcessEvent
};
例如:uint16 SampleApp_ProcessEvent( uint8 task_id, uint16 events );
摘:cc2430定时器1中的128分频是怎么回事?
定时器1可以根据寄存器T1CTL的设置 分为8 32 128分频
不明白分频是什么意思?还请大家帮忙解释一下
按照我的理解,单片机经PLL锁相后,会有一个主频供CPU内核操作。这个主频一般比较高,如果直接作为定时期的基频,在定时器位数一定(较低)的情况下,往往中断可实现的最大定时时间比较短,会频繁触发中断,严重影响效率。因此内部设计硬分频器,将主频分频(就是主频的1/N)作为定时器的基频,这样的话,在定时精度要求不严格的场合(如秒脉冲),可以延长中断单元的运行时间,减少中断请求的次数。