共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 跳转至页
回复
有奖活动 | |
---|---|
【有奖活动】分享技术经验,兑换京东卡 | |
话不多说,快进群! | |
请大声喊出:我要开发板! | |
【有奖活动】EEPW网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
vscode+cmake搭建雅特力AT32L021开发环境被打赏30分 | |
【换取逻辑分析仪】自制底板并驱动ArduinoNanoRP2040ConnectLCD扩展板被打赏47分 | |
【分享评测,赢取加热台】RISC-V GCC 内嵌汇编使用被打赏38分 | |
【换取逻辑分析仪】-基于ADI单片机MAX78000的简易MP3音乐播放器被打赏48分 | |
我想要一部加热台+树莓派PICO驱动AHT10被打赏38分 | |
【换取逻辑分析仪】-硬件SPI驱动OLED屏幕被打赏36分 | |
换逻辑分析仪+上下拉与多路选择器被打赏29分 | |
Let'sdo第3期任务合集被打赏50分 | |
换逻辑分析仪+Verilog三态门被打赏27分 | |
换逻辑分析仪+Verilog多输出门被打赏24分 |