历史上的今天
今天是:2024年09月02日(星期一)
2021年09月02日 | STM8S103定时中断初始化
2021-09-02 来源:eefocus
使用timer4做一个1K的定时器中断。
timer.c
void timer4_init()
{
TIM4_IER = 0x00; //禁止中断
TIM4_EGR = 0x01; //允许产生更新事件
TIM4_PSCR = 0x06; //计数器时钟=主时钟/2^TIM4_PSCR=16M/2^6==>16us
TIM4_ARR = 249; //设定重装载时寄存器值
TIM4_CNTR = 0; //设定计数器的初值
//定时周期=(ARR+1)*64=1ms
TIM4_CR1 = 0x01; //b0=1,允许计数器工作; b1=0,允许更新
TIM4_IER = 0x01; //允许更新中断
}
stm8_interrupt_vector.c中添加:
/* Timer4更新中断服务程序 */
@far @interrupt void TIM4_UPD_OVF_IRQHandler( void )
{
static unsigned int ii = 0;
if ( ii & gt; 30000 )
ii = 1;
else
ii++;
if ( ii % 1000 == 0 )
read_adc( ADC_Channel3 );
TIM4_SR = 0x00; /* 清除更新标志 */
PA_ODR = PA_ODR ^ (1 & lt; < 3); /* PA3取反 */
TIM4_CNTR = 0; /* 置0 */
return;
}
这里实现了两个功能,一个是每秒读一次ADC同时发送到串口,另一个是为PA3反复置位,以便用示波器检测中断频率是不是1K。当然,中断函数中海需要添加:
{0x82, TIM4_UPD_OVF_IRQHandler}, /* irq23 */
还有就是系统时钟默认在启动后会8分频,所以还要对时钟初始化:
void clk_init()
{
CLK_CKDIVR = 0x00; //fcpu
}
史海拾趣
|
采用嵌入式实时操作系统(RTOS)可以更合理、更有效地利用CPU的资源,简化应用软件的设计,缩短系统开发时间,更好地保证系统的实时性和可靠性。由于RTOS需占用一定的系统资源(尤其是RAM资源),只有μC/OS-II、embOS、salvo、FreeRTOS等少数实时操作 ...… 查看全部问答> |
|
Oversampling SD Analog-to-Digital Converters Modeling Based on VHDL Oversampling SD Analog-to-Digital Converters Modeling Based on VHDL. 是E供大家学习… 查看全部问答> |
|
wince 5.0 arm9 ------------------------------------------ 现在需要用到RS485,我想直接修改串口的驱动,485芯片的收发开关由一个gpio控制,串口的发送FIFO为空或达到触发条件时中断, 但是必须串口的移位寄存器为空时,才能去设置485芯片为收 ...… 查看全部问答> |
|
我使用裸奔方式 先定义 #define NVIC_ISER0 (*(volatile unsigned long *) 0xE000E100) #define NVIC_ICER0 &nbs ...… 查看全部问答> |
|
我使用仿真器调试下面程序时进入中断很慢,而且需要按下全速运行后再按停止,反复几次后才能进到SD24的中断里面,不知什么原因,请大神指教。 #include \"msp430afe253.h\" #define Num_of_Results 8 /* Arrays to stor ...… 查看全部问答> |




