经过许多天的努力,总算可以使用中断了,但为了让RTOS可以使用定时中断,那么在S3C44B0里有什么样的中断可以实现呢?在S3C44B0里有两种方法可以实现这样中断,一种是通过定时器中断,一种是通RTC的TICK定时中断。由于S3C44B0片内已经有提供给RTOS的中断,就应使用它作为RTOS的中断,这样可以使时间片跟RTC时钟是时间同步。RTOS调度任务是通过设置时间片中断实现的。当时间片到达时,就向CPU发出中断信号,CPU就会把当前任务状态保存下来,然后转到中断进程运行,并且在中断里放着的是进行优先选择运行任务的程序,接着从中断返回时就可以运行不同的任务了。既然这个中断那么重要,就需要详细地了解TICK中断实现。
S3C44B0的内部有一个实时日历时钟(RTC)单元,它只需要外接一个32.768kHz的晶振即可工作。当然要对它进行编程初始化才能工作的,下面就来看看是怎么样初始化的。
首先,通过RTCCON寄存器的第0位来表示要“读”还是“写”RTC的寄存器。当设置第0位为1时,就允许读写所有寄存器。当设置第0位为0时,就只允许读,不允许写所有寄存器。
其次,通过TICNT寄存器来控制产生TICK中断。这个寄存器的第7位是表示是否启用TICK中断。当启用时,就设置为1。第0到6位表示中断计数值,要多久才中断,是通过下面的公式计算得到的:
时间片 = (n+1)/128 秒,
其中n是需要设置的数值,它的范围是从1到127。
从上面的公式可以看出来,当设置n值越大时,时间片就越大,当设置为127时,就时一秒钟中断一次了。设置为最小值1时,就是15.625ms。
最后,下面这段程序就是设置TICK中断,这样就要以供RTOS使用了。
///////////////////////////////////////////////////////////////////////////////
//函数名称: TickIntEnable
//函数功能: 打开Tick中断。
//输入参数: nTickCount---分频系数。
//输出参数:
//返 回 值:
//开发人员: 蔡军生
//时 间: 2006/02/13
//修改说明:
//
///////////////////////////////////////////////////////////////////////////////
void TickIntEnable(unsigned int nTickCount)
{
//
I_ISPC |= (unsigned int)0x01 << 20;
//
//清除屏蔽位。
INTMSK &= ~(BIT_GLOBAL|BIT_TICK);
RTCCON = (unsigned char)1;
TICINT = (unsigned char)(nTickCount | 0x80);
RTCCON = (unsigned char)0;
}
如果中断寄存器已经设置好,那么这个RTOS的时间片中断,就已经可以工作了。接着最重要的工作,就是怎么样在中断子程序里进行RTOS的任务切换,这个比较复杂,需要很长时间去了解和实验,并且要对ARM的汇编比较好。这个时间片设置长短,也跟不同的应用有关系的,如果需要快速实时的中断,就需要设置它短一点,这样检查任务切换就及时一点,但也有一个坏处,就是浪费在任务切换上的CPU资源比较多。如果任务调试不需要太及时,就可以设置大一点,这样浪费在任务切换上的CPU资源就减少了。
上一篇:学习ARM开发(14)
下一篇:学习ARM开发(20)
- 热门资源推荐
- 热门放大器推荐
- 用于可调电流源的 LT1764AEFE-3.3 LDO 稳压器的典型应用
- LT3756IUD-1 降压模式 1A LED 驱动器的典型应用电路,具有高调光比和 LED 开路报告
- LT1952IGN 36V 至 72V 输入、12V/20A 半稳压总线转换器的典型应用电路
- LTC4419IMSE 高效备用电源的典型应用电路
- 使用 Analog Devices 的 LT1328 的参考设计
- LTC2241CUP-10 演示板,LVDS OUT,VCC = 2.5V,210Msps,10 位,10MHz< AIN< 250MHz
- LTC3121IDE 4.3V 至 5V、500mA USB/电池供电同步升压转换器的典型应用电路
- TA8126SG 3V DC/DC转换器电调典型应用
- 便携式相机的完整电源解决方案
- RSL15-EVB:RSL15 评估和开发板

现代雷达系统的信号设计
TLC254ACN

BFR340T






京公网安备 11010802033920号