瑞萨HEW中写中断函数的方法
时间:10-02
整理:3721RD
点击:
以下用R8C/1B为例写TimerX的中断函数:
1、首先确认TimerX的中断向量标号为22,数据手册中断章节可以查到。
2、改写sect30.inc文件中的向量表
/**************************************************************
*函数原型: TimerXInt
*功能 : TIMER X 中断 中断向量22
**************************************************************/
4、开相关中断并设置中断优先级
/*************************************************************
*函数原型: InitTimerX()
*功能 : 短延时程序,约6US @8MHz
**************************************************************/
asm("FSET I");
;================================================
标题二:R8C/1A 1B系列的相关例程和应用
TimerX的中断使用例程:
;================================================
标题三:关于M16C/62P的定时器中断
补充2点:
1 中断一旦响应,中断请求标志IR位会自动清除。
2 如果在sec30中指定了中断函数地址,应该不用写vect = XXX,这个是使用自动生成向量表时使用的。
1、首先确认TimerX的中断向量标号为22,数据手册中断章节可以查到。
2、改写sect30.inc文件中的向量表
- .lword dummy_int ; vector 17
- .lword dummy_int ; vector 18
- .lword dummy_int ; vector 19
- .lword dummy_int ; vector 20
- .lword dummy_int ; vector 21
- .glb _TimerXInt
- .lword _TimerXInt ; vector 22
- .lword dummy_int ; vector 23
- .lword dummy_int ; vector 24
- .lword dummy_int ; vector 25
/**************************************************************
*函数原型: TimerXInt
*功能 : TIMER X 中断 中断向量22
**************************************************************/
- #pragma INTERRUPT TimerXInt() vect=22;
- void TimerXInt(void) //1s
- {
- ir_txic = 0;
- 用户代码
- }
4、开相关中断并设置中断优先级
/*************************************************************
*函数原型: InitTimerX()
*功能 : 短延时程序,约6US @8MHz
**************************************************************/
- void InitTimerX() // 定时器X
- {
- txck0 = 1;
- txck1 = 0;
- prex=125;
- tx=125;
- txmr = 0x00;
- txic = 1; // Interrupt priority level = 1
- ir_txic = 0; // Interrupt request flag clear
- txs = 1; // Timer X count start flag = start
- }
asm("FSET I");
;================================================
标题二:R8C/1A 1B系列的相关例程和应用
TimerX的中断使用例程:
- 初始化程序:
- void InitTimerX() // 定时器X
- {
- txck0 = 0; /* Timer X count source = f1 */
- txck1 = 0;
- /* Setting main cycle timer */
- /* 8MHz * 1/1 * 256 * 250 = 2ms */
- prex = 256-1; /* Setting Prescaler X register */
- tx = 250-1; /* Setting timer X register */
- txmr = 0x00; /* Timer X : timer mode */
- txic = 5; /* Interrupt priority level = 5 */
- ir_txic = 0; /* Interrupt request flag clear */
- txs = 1; /* Timer X count start flag = start */
- }
- 中断程序:
- #pragma INTERRUPT TimerXInt() vect=22;
- void TimerXInt(void) //6.4ms
- {
- //用户程序
- ir_txic = 0;
- }
- 中断向量:SECT30.INC文件中
- .glb _TimerXInt
- .lword _TimerXInt ; vector 22
;================================================
标题三:关于M16C/62P的定时器中断
- #include "sfr62p.h"
- /******************************************************/
- //定时器模式,中断A0
- #pragma INTERRUPT/B vect 21 ms_timer_a0
- void ms_timer_a0(void){
- ta0 = 24000-1; //1msec @24MHz
- if(beep_time==0)beep=1;
- else beep_time--;
- }
- /*****************************************************
- 等待20ms,直到PLL时钟稳定
- ******************************************************/
- void pll_stable_20ms(void)
- {
- //TA0MR:定时器A0模式寄存器
- ta0mr = 0x80; //定时器模式,32分频
- ta0 = 3750-1; //20ms:@6MHz, f32
- ta0ic = 0x00; //Level 0
- tabsr = 0x01; //TimerA0启动
- while(ir_ta0ic == 0){} //延时20ms;Vcc = 5V
- tabsr = 0x00; //TimerA0停止
- ir_ta0ic = 0; //清中断标志位
- }
- /******************************************************/
- //寄存器初始化
- void mcu_init(void)
- {
- prc0=1;//允许写PRC0
- prc1=1;//允许写PRC1
- pm0 = 0x00; //单芯片模式
- pm1 = 0x08;
- cm0 = 0x08; //主时钟
- cm1 = 0x20; //系统时钟为主时钟
- plc0 = 0x12;
- pm2 = 0x00;
- plc0 = 0x92; //PLL时钟启动
- pll_stable_20ms(); //等待20ms,直到PLL时钟稳定
- cm1 = 0x22; //系统时钟为PLL时钟
- pclkr = 0x03;
- prc0=0;
- prc1=0; //PRCR禁止写
- adcon2 = 0x01; //AD4分频;端口P10;采样保持
- adcon0 = 0x02; //软件触发;单次模式;通道2
- adcon1 = 0x28; //不使用ANEX0和ANEX1;Vref;10位模式
- //定时器设置
- ta0ic = 0x01; //有中断请求,LEVEL 1
- ta0mr = 0x00; //定时器模式,f1
- ta0 = 24000-1; //1msec @24MHz
- ta0s = 1; //start counting
- }
- /******************************************************/
- void main(void)
- {
- mcu_init(); //寄存器初始化
- while(1){
- }
- }
补充2点:
1 中断一旦响应,中断请求标志IR位会自动清除。
2 如果在sec30中指定了中断函数地址,应该不用写vect = XXX,这个是使用自动生成向量表时使用的。
谢谢分享,大赞!
小编,这些东西看不懂啊~~
... 谢谢分享学习一下
好,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,