以下是前提<br />1. 延时的过程中最好不关断,以保持对高优先级中断的响应<br />2. 延时的时间可能很短,比如说5us,也有可能比较长,比如说500us,且对时序的精度要求比较高<br />3. 系统中有不少于一个的较高级别的中断源,其中断服务的执行时间极端情况下可能比较长,比如说有可能大于500us,但通常不会太长。<br />4. 系统主频不希望太高(纯粹个人习惯),比如说11.06MHz,<br /><br />应用1,读写单总线器件DS1820,需要比较严格的时序,比如单总线读取时序,<br />1.将口线输出0,<br />2.延时待6us<br />3.口线变高阻态<br />4.延时9us<br />5.读取口线上的电平(口线输出0,15us后读取)<br />6.口线输出0,60us后返回<br /><br />应用2,模拟串口<br />LPC2103中有两个串口,但有时使用PWM的时候会导致管脚冲突,或者需要更多的串口的时候,需要软件模拟串口。串口接收的时候,收到起始位后每隔一段固定的时间检测输入信号,以9600bps的速率接收时,每位需要延时104us,接收一个字节需要1ms,即使232协议允许有一定的速率波动,通常也不会超过10%。<br /><br />以这两个应用为例,都需要比较精确的us级的延时,误差都不能太大,要想用关中断的办法来确保延时精度都需要关比较长时间的中断。<br />以前用51实现的时候,1ms干不了多少事,关上1ms的中断也就关了,还用过MSP430,TA0有定时锁存管脚信号的功能,ARM的定时器没发现有这个功能<br /><br />下面是问题:<br />用ARM,比如说LPC2104,不知道有什么更好的办法实现精确延时没有!? |
|