嵌入式定时器中断实验总结(嵌入式实验中断实验)
嵌入式程序分析 pxa270 实现20秒定时并产生中断。每产生一次中断就使蜂鸣器响一声。然后让所有led闪1次
首先,你离进入嵌入式还很遥远。因为下面的代码你竟然不懂。
其次。你这个Pxa是什么我不知道,也不去了解,只看代码。然后给你注释。
最后,如果你对我回答满意,请选我为最佳,并点顶。
#include "config.h"
#define E_Interrupt 10
以下5行是对位的控制。我猜测,1为使能,0为失能。
#define Beep (111)
#define LED0 (117)
#define LED1 (118)
#define LED2 (119)
#define LED3 (120)
#define count 1625000
#define BeepOn() GPCR0=GPCR0 | Beep (这句话什么意思?)这句话意思是将GPCR0的第11位置为1.也就是使能beep。GPCR0 我猜为GPIO的control寄存器1
#define BeepOff() GPSR0=GPSR0 | Beep
#define LedOn() GPCR2=GPCR2|LED0|LED1|LED2|LED3; (这句话什么意思)这句话的意思是将GPCR2的寄存器的17,18,19,20位置为1.也就是使能led0.led1.led2.led3.
#define LedOff() GPSR2=GPSR2|LED0|LED1|LED2|LED3; 这句话就和上面是相反的作用,失能。也就是关闭的意思。
uint8 num;
问题2 :
void DelayNS(uint32 dly) 延时函数。
{
uint32 i;
for(; dly0; dly--)
for(i=0; i50000; i++);
}
void SystemInit() 系统初始化函数。
{
GPDR0=GPDR0 | Beep;//GP11 set as output
GAFR0_L=GAFR0_L (0x0022);//GP0 set as GPIO
GPDR2=GPDR2|LED0|LED1|LED2|LED3;//配置GP81,82,83,84为输出
GAFR2_U=GAFR2_U(~(0xff2));//配置GP81,82,83,84为GPIO
OSMR0=OSMR0 | count;
OIER=OIER | E_Interrupt;
UART_Init(115200); 串口初始化 频率为115200
}
void IRQ_EInit() 中断初始化。
{
num++;
OSSR = OSSR | E_Interrupt; 我猜OSSR为系统状态寄存器
OSCR0=OSCR0 0;
}
void EIntInit() 这段代码你需要了解ICMR .ICLR,ICCR ,IPR0分别表示什么寄存器,另外寄存器ICMR.ICLR的第26位表示什么。
{
ICMR=ICMR | (0x0126);
ICLR=ICLR (~(0x0126));
ICCR=ICCR (~0x01);
IPR0=IPR0 | (260) | (131);
VICVectAddr[26]=(uint32) IRQ_EInit;
}
这短代码啥意思?
问题3:int main(void)
{
SystemInit(); 系统初始化
EIntInit(); 中断初始化
IRQEnable(); 中断使能
while(1) 无限循环
{
if(num==20)
{
BeepOn(); 使能BEEP
LedOn(); 使能LED灯
DelayNS(50); 延时50
LedOff() 关闭led灯
num=0; num重新计数
}
else
{
BeepOff(); 关闭beep
LedOff(); 关闭led灯
}
}
return 0;
}
嵌入式系统的定时器问题
定时器时钟为5MHz,也就是说定时器启动后每隔1/(5*10^6),进行加一操作。那么10ms就需要:(10*10^-3)*(5*10^6)=50000次加一操作。当定时器达到最大计数值,产生溢出中断,定时结束。那么现在只缺一个最大计数值了,16位可计算范围为2*16=65536。
综上,65536-50000=15536。计数初值为15536(十进制);3CB0(16进制)。
嵌入式中的“中断”什么原理,如何使用?
1.中断基本概念
什么是中断?先打个比方。当一个经理正处理文件时,电话铃响了(中断请求),不得不在文件上做一个记号(返回地址),暂停工作,去接电话(中断),并指示“按第二方案办”(调中断服务程序),然后,再静下心来(恢复中断前状态),接着处理文件……。计算机科学家观察了类似实例,“外师物化,内得心源”,借用了这些思想、处理方式和名称,研制了一系列中断服务程序及其调度系统。
中断是cpu处理外部突发事件的一个重要技术。它能使cpu在运行过程中对外部事件发出的中断请求及时地进行处理,处理完成后又立即返回断点,继续进行cpu原来的工作。引起中断的原因或者说发出中断请求的来源叫做中断源。根据中断源的不同,可以把中断分为硬件中断和软件中断两大类,而硬件中断又可以分为外部中断和内部中断
两类。
外部中断一般是指由计算机外设发出的中断请求,如:键盘中断、打印机中断、定时器中断等。外部中断是可以屏蔽的中断,也就是说,利用中断控制器可以屏蔽这些外部设备
的中断请求。
内部中断是指因硬件出错(如突然掉电、奇偶校验错等)或运算出错(除数为零、运算
溢出、单步中断等)所引起的中断。内部中断是不可屏蔽的中断。
软件中断其实并不是真正的中断,它们只是可被调用执行的一般程序。例如:rom
bios中的各种外部设备管理中断服务程序(键盘管理中断、显示器管理中断、打印机管理
中断等,)以及dos的系统功能调用(int
21h)等都是软件中断。
cpu为了处理并发的中断请求,规定了中断的优先权,中断优先权由高到低的顺序是:
(1)除法错、溢出中断、软件中断
(2)不可屏蔽中断
(3)可屏蔽中断
(4)单步中断。