嵌入式定时器中断实验总结(嵌入式实验中断实验)

http://www.itjxue.com  2023-01-31 21:33  来源:未知  点击次数: 

嵌入式程序分析 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)单步中断。

(责任编辑:IT教学网)

更多

推荐鼠标代码文章