断断续续看了uC/OS-II内核书和一两个实验,发现移植的第一部,就遇到时钟节拍处理不好的困难。这两天,又对其中的一个比较完善的例程作仔细的分析,初步有了一些认识。
个人认为,移植的第一个问题,是解决时钟节拍的处理,过程如下:
一、首先在主函数中调用目标板初始化函数ARMTargetInit();主要是初始化要用到的定时器和外部中断;
二、在启动系统之前,调用函数ARMTargetStart(),打开Timer0中断;
三、启动系统OSStart();
下面,详细说明上述过程的步骤:
建立文件target.c和target.h
target.c:
void ARMTargetInit(void)
{
InitInterrupts();
InitTimers();
}
void InitInterrupts(void) //初始化中断模式
{
rINTCON=0x5; // Non-vectored,IRQ enable,FIQ disable
rINTMOD=0x0; // All=IRQ mode
rINTMSK=0X7FFFFFF; // all interrupts disable.
}
void InitTimers(void) //初始化Time0,作为系统始终节拍
{
rTCFG0=(MCLK>>1)/1000000-1; //预分频值
rTCFG1=0x00000000; // mux0 = 1/2
//定时器0输入时钟频率=MCLK/(预分频值+1)/除法值mux0,定时器0输入时钟频率为1MHz
rTCNTB0= 1000000/OS_TICKS_PER_SEC; //定时器0输出时钟频率为OS_TICKS_PER_SEC
rTCMPB0= 0x0;
rTCON=0x2; //update mode for TCNTB0 and TCMPB0.
rTCON=0x9; //timer0 = auto reload, start
}
void ARMTargetStart(void) //启动定时中断和外中断EXINT0
{
RequestSystemTimer();
InstallSystemTimer();
}
void RequestSystemTimer(void)
{
pISR_TIMER0= (unsigned)Timer0_Exception; //设置Timer0中断函数地址
pISR_EINT0 = (unsigned)Exint0_Exception;
//这里可以设置任何中断!注意要添加对应的中断服务函数
}
void InstallSystemTimer(void)
{
rINTCON=0x5; //Non-vectored,IRQ enable,FIQ disable
rINTMSK=~( BIT_GLOBAL | BIT_TIMER0 ); //Default value=0x7ffffff
}
void Timer0_Exception(void)
{
rI_ISPC=BIT_TIMER0; //清除定时器0中断挂起位
OSTimeTick(); //注意:在进入中断后运行次语句前,必须禁止中断
}
void Exint0_Exception(void)
{
rI_ISPC=BIT_EINT0;
//此后可以打开中断
}
注意:OSTimeTick()是uC/OS-II系统函数!
target.h根据上面的.c文件,就很容易写出来。
这里可能需要重点说明中断执行过程,也是个人的一点粗浅认识。以 Timer0中断为例:
如果发生定时器Timer0中断,PC将跳转到pISR_TIMER0所在地址,根据44binit.s文件,分析可以知道(参考我的《ARM的中断处理过程》一文)函数Timer0_Exception()将得以执行!
关于节拍的产生过程以及相应的任务切换,将在下一个文件中谈到。
注意:我的文章多半是学习时产生的认识,需要今后的应用中验证。
上一篇:ARM设计的无线网卡设备驱动技术
下一篇:一种多通道实时数据采集监控系统设计与实现
推荐阅读最新更新时间:2024-10-20 15:01
设计资源 培训 开发板 精华推荐
- ADR366A 3.3V 低功耗、低噪声电压基准的典型应用,具有灌/拉能力
- STC32G12K128-LQFP48
- SY89859U,用于 GB 以太网交换机的时钟缓冲器的评估板
- EVAL-AD7863CBZ,AD7863 评估板,14 位,250KSPS,便携式 2 通道 ADC
- 使用 BFP640 SiGe 晶体管的 3V、+14 dBm、2.33 GHz SDARS 有源天线第二级低噪声放大器
- ADR434A 4.096 Vout 超低噪声 XFET 电压基准的典型应用,具有灌电流和拉电流能力
- LT8494IUF 750kHz、16V 至 32V 输入、48V 输出、0.5A 升压转换器的典型应用电路
- AM1G-2412SZ 12V 1 瓦 DC-DC 转换器的典型应用
- ADR421 超精密、低噪声、2.048 Vout XFET 电压基准的典型应用
- 用于顺序电源的 LTC3607EUD 降压稳压器的典型应用电路