共2条
1/1 1 跳转至页
定时器为何不进服务子程序呢?(附程序)

问
(1)----*******startup.s文件*****
Startup
LDR PC, ResetAddr ;//复位
...
LDR PC, IRQ_Addr ;//IRQ
LDR PC, FIQ_Addr ;//FIQ
;//文字池
...
IRQ_Addr DCD IRQ_Handler
FIQ_Addr DCD FIQ_Handler
;//-------------
InitStack
....
MSR CPSR_c, #0x05f ;//设置用户/系统模式堆栈.
LDR SP, UsrStack
MOV PC,R0
;//--------------------
IRQ_Handler
B . ;//for test
FIQ_Handler
B .
(2)--******timer_module.c文件******
//------------------------------------------------------------------------------------------------------
// ***** Include Area *****
#include "Includes.h"
/*
--------------------------------------------------------------------------------------------------------
* Function:IRQ_Init 对中断控制进行配置
* Input:none
* Output:none
* Return:none
* Other:
--------------------------------------------------------------------------------------------------------
*/
void IRQ_Init(void)
{
VICIntSelect=0x00000000; //选择中断FIQ和IRQ方式,将所有中断配置成为IRQ
//IRQ slot 0
VICVectCntl0=0x24; //Timer0定时器分配
VICVectAddr0=(int)IRQ_Timer0_isr;
VICIntEnClr=0x0;
VICIntEnable = 0x00000010;
}
/*
--------------------------------------------------------------------------------------------------------
* Function:Timer0Init 定时器Timer0初始化
* Input:none
* Output:none
* Return:none
* Other:
--------------------------------------------------------------------------------------------------------
*/
void Timer0_Init(void)
{
T0TC=0; //定时器设置为0
T0PR=0; //设置分频值,时钟不分频
T0MCR=0x03; //设置匹配后复位TC,并产生中断
T0MR0=Fpclk/10; // 比较值(1s定时值)
T0TCR=0x01; //启动定时器0
}
/*
--------------------------------------------------------------------------------------------------------
* Function:IRQ_Timer0_isr 定时器Timer0中断处理程序
* Input:none
* Output:none
* Return:none
* Other:
--------------------------------------------------------------------------------------------------------
*/
void IRQ_Timer0_isr(void)
{
int i,j;
//for test only
i=0;
j=i;
T0IR = 0x01; // 清除中断标志
//add code here
}
(3)
//系统时钟定义如下
#define Fosc 11059200
#define Fcclk (Fosc * 4)
#define Fcco (Fcclk * 4)
#define Fpclk (Fcclk / 4) * 1
int main(void)
{
int i;
i=i;
/*Timer Module*/
IRQ_Init();
Timer0_Init(); //定时器Timer0初始化
while(1);
}
(完毕)
问题:我在IRQ_Handler
B . ;//for test
和void IRQ_Timer0_isr(void) 函数里面
,设置断点,程序都不进来。
程序一直在while(1)执行。
请各位朋友帮忙,问题出于哪里,我哪里没有设置好呢?我是用ads1.2的AXD软调试的.
另外,void __irq IRQ_Timer0_isr(void)定义的话,编译出错。 谢谢先
答 1: 只能进入IRQ总中断IRQ_Handler()而非中断向量!!! 答 2: 不懂,假如中断来了,进入IRQ_Handler
B . ;//for test
还是VICVectAddr0=(int)IRQ_Timer0_isr;对应的void IRQ_Timer0_isr(void)
函数中?
那VICVectAddr0设置来干吗的? 答 3: re:怎么感觉lpc的中断控制很难使用...
很多地方含含糊糊的
大家帮忙呀,怎么不进中断服务程序 答 4: Startup file for Philips LPC2000 device seriesVectors: LDR PC,Reset_Addr
LDR PC,Undef_Addr
LDR PC,SWI_Addr
LDR PC,PAbt_Addr
LDR PC,DAbt_Addr
NOP /* Reserved Vector */
; LDR PC,IRQ_Addr
LDR PC,[PC, #-0x0FF0] /* Vector from VicVectAddr */
LDR PC,FIQ_Addr
Reset_Addr: DD Reset_Handler
Undef_Addr: DD Undef_Handler?A
SWI_Addr: DD SWI_Handler?A
PAbt_Addr: DD PAbt_Handler?A
DAbt_Addr: DD DAbt_Handler?A
DD 0 /* Reserved Address */
IRQ_Addr: DD IRQ_Handler?A
FIQ_Addr: DD FIQ_Handler?A 答 5: 把IRQ指向向量中断控制器把IRQ指向向量中断控制器 答 6: 当发现基本的应用无法实现的时候,踏下心来多读几遍书。 答 7: LDR PC,[PC, #-0x0FF0]
Startup
LDR PC, ResetAddr ;//复位
...
LDR PC, IRQ_Addr ;//IRQ
LDR PC, FIQ_Addr ;//FIQ
;//文字池
...
IRQ_Addr DCD IRQ_Handler
FIQ_Addr DCD FIQ_Handler
;//-------------
InitStack
....
MSR CPSR_c, #0x05f ;//设置用户/系统模式堆栈.
LDR SP, UsrStack
MOV PC,R0
;//--------------------
IRQ_Handler
B . ;//for test
FIQ_Handler
B .
(2)--******timer_module.c文件******
//------------------------------------------------------------------------------------------------------
// ***** Include Area *****
#include "Includes.h"
/*
--------------------------------------------------------------------------------------------------------
* Function:IRQ_Init 对中断控制进行配置
* Input:none
* Output:none
* Return:none
* Other:
--------------------------------------------------------------------------------------------------------
*/
void IRQ_Init(void)
{
VICIntSelect=0x00000000; //选择中断FIQ和IRQ方式,将所有中断配置成为IRQ
//IRQ slot 0
VICVectCntl0=0x24; //Timer0定时器分配
VICVectAddr0=(int)IRQ_Timer0_isr;
VICIntEnClr=0x0;
VICIntEnable = 0x00000010;
}
/*
--------------------------------------------------------------------------------------------------------
* Function:Timer0Init 定时器Timer0初始化
* Input:none
* Output:none
* Return:none
* Other:
--------------------------------------------------------------------------------------------------------
*/
void Timer0_Init(void)
{
T0TC=0; //定时器设置为0
T0PR=0; //设置分频值,时钟不分频
T0MCR=0x03; //设置匹配后复位TC,并产生中断
T0MR0=Fpclk/10; // 比较值(1s定时值)
T0TCR=0x01; //启动定时器0
}
/*
--------------------------------------------------------------------------------------------------------
* Function:IRQ_Timer0_isr 定时器Timer0中断处理程序
* Input:none
* Output:none
* Return:none
* Other:
--------------------------------------------------------------------------------------------------------
*/
void IRQ_Timer0_isr(void)
{
int i,j;
//for test only
i=0;
j=i;
T0IR = 0x01; // 清除中断标志
//add code here
}
(3)
//系统时钟定义如下
#define Fosc 11059200
#define Fcclk (Fosc * 4)
#define Fcco (Fcclk * 4)
#define Fpclk (Fcclk / 4) * 1
int main(void)
{
int i;
i=i;
/*Timer Module*/
IRQ_Init();
Timer0_Init(); //定时器Timer0初始化
while(1);
}
(完毕)
问题:我在IRQ_Handler
B . ;//for test
和void IRQ_Timer0_isr(void) 函数里面
,设置断点,程序都不进来。
程序一直在while(1)执行。
请各位朋友帮忙,问题出于哪里,我哪里没有设置好呢?我是用ads1.2的AXD软调试的.
另外,void __irq IRQ_Timer0_isr(void)定义的话,编译出错。 谢谢先
答 1: 只能进入IRQ总中断IRQ_Handler()而非中断向量!!! 答 2: 不懂,假如中断来了,进入IRQ_Handler
B . ;//for test
还是VICVectAddr0=(int)IRQ_Timer0_isr;对应的void IRQ_Timer0_isr(void)
函数中?
那VICVectAddr0设置来干吗的? 答 3: re:怎么感觉lpc的中断控制很难使用...
很多地方含含糊糊的
大家帮忙呀,怎么不进中断服务程序 答 4: Startup file for Philips LPC2000 device seriesVectors: LDR PC,Reset_Addr
LDR PC,Undef_Addr
LDR PC,SWI_Addr
LDR PC,PAbt_Addr
LDR PC,DAbt_Addr
NOP /* Reserved Vector */
; LDR PC,IRQ_Addr
LDR PC,[PC, #-0x0FF0] /* Vector from VicVectAddr */
LDR PC,FIQ_Addr
Reset_Addr: DD Reset_Handler
Undef_Addr: DD Undef_Handler?A
SWI_Addr: DD SWI_Handler?A
PAbt_Addr: DD PAbt_Handler?A
DAbt_Addr: DD DAbt_Handler?A
DD 0 /* Reserved Address */
IRQ_Addr: DD IRQ_Handler?A
FIQ_Addr: DD FIQ_Handler?A 答 5: 把IRQ指向向量中断控制器把IRQ指向向量中断控制器 答 6: 当发现基本的应用无法实现的时候,踏下心来多读几遍书。 答 7: LDR PC,[PC, #-0x0FF0]
共2条
1/1 1 跳转至页
回复
打赏帖 | |
---|---|
C语言函数宏的三种封装方式被打赏50分 | |
嵌入式LinuxC语言程序调试和宏使用技巧被打赏50分 | |
让代码中包含最新的编译时间信息被打赏50分 | |
【分享开发笔记,赚取电动螺丝刀】STM32F769LVGL优化显示被打赏26分 | |
rtthread硬件加密--2crc加密分析被打赏10分 | |
【分享开发笔记,赚取电动螺丝刀】STM32F769驱动ST7789以及显示优化被打赏36分 | |
【分享开发笔记,赚取电动螺丝刀】S32K146 PAL模拟I2C驱动适配被打赏23分 | |
我想要一部加热台+电源硬件设计规范被打赏16分 | |
我想要一部加热台+LED背光驱动芯片RT9293知识被打赏18分 | |
【分享开发笔记,赚取电动螺丝刀】S32K146 ADC 模块配置使用被打赏24分 |