精华内容
下载资源
问答
  • (寄存器:GPxxCON)例:②配置外部中断触发模式,上升沿触发,下降沿触发,双边触发,高电平触发,低电平触发(寄存器:EXT_INT_x_CON)例:③取消屏蔽外部中断(寄存器:EXT_INT_x_MASK)例:④通过向量中断控制器(VI...

    实验板子:tiny210(芯片:s5pv210)

    实验目的:通过外部中断操作两个按键实现对LED灯的亮灭控制

    步骤:①初始化GPIO端口,使GPIO为外部中断状态;(寄存器:GPxxCON)

    例:

    52e2b2b1fce149a51070df5f8a1d596e.png

    ②配置外部中断触发模式,上升沿触发,下降沿触发,双边触发,高电平触发,低电平触发(寄存器:EXT_INT_x_CON)

    例:

    854192a87c374a5259cbf08b5adae094.png

    ③取消屏蔽外部中断(寄存器:EXT_INT_x_MASK)

    例:

    3fa2d94f0f7307fe0fc18bddd4d2b3de.png

    ④通过向量中断控制器(VIC)使能中断(寄存器:VIC0INTENABLE,VIC1INTENABLE,VIC2INTENABLE,VIC3INTENABLE)(注:几乎每一个中断都有其对应的VIC)

    8da0e6a473df611d56345b3106b49a02.png

    注:VICINTENABLE寄存器分别包括VIC0,IVC1,VIC2,VIC3四个,每一个中断控制器有32位,每一位对应一个中断源(假如你要使能外部中断1,那么首先要先找到外部中断1对应哪一个中断控制器,然后找到这个中断控制器的相应位为设置)

    ⑤设置中断程序入口(寄存器:VICxVECTADDRx)

    例:*(VICxVECTADDRx) = 函数名(函数名就是一个地址)

    cb3af760a55e8062df98ce40f7454d66.png

    ⑥开总中断

    1 __asm__(2 /*开中断*/ 3 "mrs r0,cpsr\n" 4 "bic r0, r0, #0x80\n" 5 "msr cpsr_c, r0\n" 6 :7 :8 );

    ⑦编写中断处理程序(清除中断寄存器:EXT_INT_x_PEND)

    1 void函数名()2 {3 //1. 保存环境4 5 //2. 中断处理6 7 //3. 清除中断 8 *(EXT_INT_x_PEND) = ~0x0;//写1清除中断标志 9 *(VICxADDRESS) = 0;10 //4. 恢复环境 11 }

    中断编写思维导图(仅供参考流程思路):

    be6c1133b85d5d7912f87820fe91eb93.png

    总结:由中断编写思维导图应该有的思路是:1. 对相应GPIO以及中断源的初始化

    2. 当中断发生,中断源对应的PEND寄存器会被置1,所以在中断处理程序里应该清除中断标志(注:写1清除中断)

    3. 当中断发生,如果MASK寄存器没有取消屏蔽,则中断不被允许,所以在编写中断程序时应首先取消相应中断的屏蔽

    4. 别忘了VIC的初始化,包括用VICINTENABLE对相应中断进行使能,用VICVECTADDR寄存器设置中断处理程序入口

    s3c2440示例代码(仅供参考思路步骤,与s5pv210不对应):

    1 voidkey_init()2 {3 rGPGCON &= ~(0x3 << 0); //设置GPGO—EINT[8] 4 rGPGCON |= (0x2 << 0); //设置GPGO—EINT[8] 5 rEXTINT1 &= ~(0xf << 0); //触发方式为低电平有效 6 rEINTPEND |= (1 << 8); //清中断 7 rEINTMASK &= ~(1 << 8); //允许外部中断 8 pISR_EINT8_23 = (U32)Key_handler; //中断服务程序 9 EnableIrq(BIT_EINT8_23); //允许中断(INTMSK) 10 }11 12 static void__irq key_handler()13 {14 if (rINTPND == BIT_EINT8_23) //INTPND同时只能有一位为1 15 ClearPending(BIT_EINT8_23); //清SRCPND、INTPND #define BIT_EINT8_23 (0x1 << 5) 16 if (rEINTPEND & (1 << 8)) //清外部中断EINTPEND 17 rEINTPEND |= 1 << 8;18 ............19 }

    其他外部中断编程参考资料:

    1.中断源的相关寄存器:

    当需要开启中断时,则需要对中断源进行相应的配置,这里主要记录常用的外部中断的配置。外部中断的配置主要是对引脚的配置,涉及的寄存器主要分为两组。

    一组是EINT0~16,涉及的寄存器主要是EXT_INT_x_CON,EXT_INT_xMASK,EXT_INT_PEND。EXT_INT_x_CON是外部中断的的配置寄存器,主要配置中断的触发方式;EXT_INT_xMASK是外部中断的屏蔽寄存器,配置引脚的中断是否屏蔽;EXT_INT_PEND是外部中断的中断未决寄存器,中断结束时必须清楚相应位,否则会持续引发中断。

    另一组的则是其余的GPIO的中断,他们复用一个中断线路,涉及的寄存器主要是GPxx_INT_CON,GPxx_INT_MASK,GPxx_INT_PEND。各寄存器功能跟第一组的类似。

    2.中断控制器的相关寄存器:

    VICxINTSELECT——中断类型选择寄存器,通过此寄存器选择是IRQ还是FIQ。

    VICxINTENABLE——中断使能寄存器,通过此寄存器使能相应的中断线路。

    VICxINTENCLEAR——中断使能清除寄存器(即失能),在控制器禁止某路中断在该寄存器设置。

    VICxIRQSTATUS——普通中断请求状态寄存器,记录了经VICxINTENABLE和VICxINTSELECT过滤后的IRQ中断请求状态。

    VICxFIQSTATUS——普通中断请求状态寄存器,记录了经VICxINTENABLE和VICxINTSELECT过滤后的FIQ中断请求状态。

    VICxRAMINTR——原始中断请求寄存器,记录了未经VICxINTENABLE和VICxINTSELECT过滤后的中断请求状态。

    VICxSOFINT——软件中断寄存器,通过该寄存器可使控制器产生相应线路的中断信号,该信号未经过优先级,VICxINTENABLE和VICxINTSELECT等寄存器的过滤。

    VICxSOFINTCLEAR——软中断清除寄存器,在ISR(中断服务程序)结束时要清除该寄存器相应位来清除中断,否则该中断会持续触发。

    VICxVECTADDRx——向量地址寄存器,该寄存器保存的是相应线路的ISR的地址。

    VICxVECTPRIORITYx——保存相应相应线路的优先级,有16个优先级,0的优先级最高,当多个相同优先级的线路同时请求中断时,按硬件优先级排序,同一组中断,中断好越低优先级越高,如VIC0中,EINT0优先级;如正在执行某ISR时,又一同软件优先级的但硬件优先级高的线路请求中断,此时该中断被屏蔽,要当前ISR执行完毕才可受理。

    VICxSWPRIORITYMASK——软件优先级屏蔽,可设置屏蔽相应的优先级,屏蔽后则相应优先级的中断被屏蔽。

    VICxADDRESS——保存当前活跃的中断线路的ISR地址,读取一次该寄存器意味着当前活跃的中断请求已被标志为已服务,此操作只能在进入中断处理时执行;向该寄存器写如任意值表示清楚控制器中该路中断状态,此操作只能在ISR结尾处执行。

    VICxPROTECTION——控制器保护模式配置寄存器,配置为保护模式时,中断控制器的寄存器只能在特权模式下被访问;非保护模式时,用户模式和特权模式都可以访问中断控制器的寄存器。VICxPROTECTION只能在特权模式下访问。

    3.处理器内核配置主要是配置CPSR寄存器,配置相应中断控制位为允许中断。

    展开全文
  • zynq中断,SDK寄存器

    2021-02-04 21:11:55
    中断来源分成三大类SPI,PPI,SGI总共96个ID号的中断,这96个中断要按照不同的优先级分配到两个处理器上,这就需要对中断进行管理:很多输入的中断给2个处理器核的中断控制器需要设置一些什么样的控制器寄存器。...

    中断来源分成三大类SPI,PPI,SGI总共96个ID号的中断,这96个中断要按照不同的优先级分配到两个处理器上,这就需要对中断进行管理:很多输入的中断给2个处理器核的中断控制器需要设置一些什么样的控制器寄存器。首先必须有全局使能,而具体到每一个中断的ID号,要设置是否使能(是否生处理器中断),以及优先级(同时发生先发生谁),还要指定中断信号发送给哪个处理器。

    ICDDCR 开启或者关闭中断设置。(全局)
    ICDICFR 配置中断触发模式。(2BIT)【一位表示触发类型,一位表示是否仅CPU0接受中断】
    ICDIPR 中断优先级设置。(8BIT)【数值越低优先级级别越高】 对应有一个ICCPMR设置接受中断的优先级门限。
    ICDIPTR 相应处理器选择。(8BIT)【if(bit0) select CPU0 if (bit1) select CPU1】留8位是预留更多核
    ICDICER 中断屏蔽寄存器。(1BIT)
    ICDISER 中断使能寄存器。(1BIT)
    ICDICPR 清除中断标志位。(1BIT)

    ICCIAR 读之得到正在发生的中断请求是什么ID号发出的(10BIT ),要求哪个处理器执行的(3BIT)。一个读的操作同时清除了所读到中断号的标志位。【读可以得到数,并且赋予了读这个动作本身有意义】.
    ICCPMR 可执行中断优先级 默认是F0,也就说从0到EF的优先级都被允许中断.
    ICCICR 是FIQ或者是IRQ.

    具体设置某一个中断ID所对应的中断处理信息,SDK提供了库函数可以直接调用,
    1,首先要中断向量要转跳到IRQ的服务程序。对应一下函数:
    2, 有几十方式可以产生IRQ (ID号96个),所以我们要知道具体是哪个发生了中断号发生了IRQ中断。找到后对应调用相应的处理程序。
    3,找到具体是哪个ID号的中断,下面步骤就是要对应再处理,可能要进行再细分(比如要118个GPIO可以产生52号中断要判断出具体哪一位)。以及进行其他相应处理。

    展开全文
  • 设置GPIO口模式为复用,并复用GPIO口为串口(AFR寄存器),顺便使能串口时钟【AFR寄存器为数组AFR[1]就是AFEH,AFR[0]就是AFEL】 RCC->AHB1ENR |= 1 << 0; GPIOA->MODER &= ~(0x3 << (2...

    串口设置流程

    设置GPIO口模式为复用,并复用GPIO口为串口(AFR寄存器),顺便使能串口时钟AFR寄存器为数组AFR[1]就是AFEH,AFR[0]就是AFEL

    	RCC->AHB1ENR |= 1 << 0;
    	
    	GPIOA->MODER &= ~(0x3 << (2*9));		//设置复用模式
    	GPIOA->MODER |= 0x2 << (2*9);
    	
    	GPIOA->MODER &= ~(0x3 << (2*10));		//设置复用模式
    	GPIOA->MODER |= 0x2 << (2*10);
    	
    	GPIOA->AFR[1] &= ~(0xf << (4*1)); //复用PA9为串口1
    	GPIOA->AFR[1] |= 0x7 << (4*1);
    	
    	GPIOA->AFR[1] &= ~(0xf << (4*2));	//复用PA10为串口1
    	GPIOA->AFR[1] |= 0x7 << (4*2);
    
    	RCC->APB2ENR  |= 1 << 4;					//使能串口

    配置CR1和CR2寄存器:

    	USART1->CR1 &= ~(1 << 15);							//16倍过采样
    	USART1->CR1 |= 1<<13;							//使能usart
    	USART1->CR1 |= 0x11<<2;							//使能发送接收位
    	USART1->CR1 |= 1 << 3;       //发送使能
    	USART1->CR1 |= 1 << 2;       //接收使能
    	USART1->CR1 &= ~(1 << 12);   //数据位8位
    
    	USART1->CR2 &= ~(3 << 12);   //1位停止位
    
    

    波特率计算公式(常用的波特率有115200,9600):

    小数要存到寄存器时得先 乘以16(相当于左移4位)(小数部分必须是16分之一的倍数)


    编写发送接收函数:

    (DR寄存器相当于单片机的BUFF寄存器)

    void  Send_byte(uint8_t byte)            //发送
    {
    while (!(USART1->SR & 1 << 7));
    USART1->DR = byte;
    }
    
    void Send_str(uint8_t *str)               
    {
    while(*str != '\0')
    Send_byte (*str++);
    }
    
    

     

    展开全文
  • 单片机中断的相关寄存器

    千次阅读 2021-06-09 18:24:20
    1、定时器控制寄存器(TCON) TCON(88H) 地址8FH8EH 8DH8CH8BH 8AH89H88H 符号TF1TR1 TF0TR0IE1 IT1IE0IT0 TF1:定时器/计时器T1的溢出中断请求标志位。当计数器T1最高位产生溢出时,由...

    1、定时器控制寄存器(TCON)

    TCON(88H)
    地址8FH8EH8DH8CH8BH8AH89H88H
    符号TF1TR1TF0TR0IE1IT1IE0IT0
    • TF1:定时器/计时器T1的溢出中断请求标志位。当计数器T1最高位产生溢出时,由硬件使TF1置1,并向CPU发出中断请求。CPU响应中断时,硬件将自动对TF1清0。
    • TF0:定时器/计时器T0的溢出中断请求标志位。
    • TR1:定时器1的运行控制位。TR1=1,启动定时器1;TR1=0,关闭定时器1。
    • TR0:定时器0的运行控制位。
    • IE1:外部中断1的中断请求标志。当检测当外部中断引脚1上存在有效的中断请求信号时,由硬件将IE1置1.当CPU响应中断请求时,由硬件使IE1清0。
    • IE0:外部中断0的中断请求标志。
    • IT1:外部中断1的中断触发方式控制位。IT1=1时,外部中断1为边缘触发方式,下降沿有效;IT1=0时,外部中断1为电平触发方式,低电平有效。
    • IT0:外部中断0的中断触发方式控制位。

    2、串行口控制寄存器(SCON)

    SCON(98H)
    地址9FH9EH9DH9CH9BH9AH99H98H
    符号TIRI
    • TI:串行口发送中断请求标志。CPU将一个数据写入发送缓冲器SBUF时,就启动发送。发送完一帧串行数据后,硬件置位TI。CPU相应中断时,不会自动清除TI,需在中断服务子程序由软件清零。
    • RI:串行口接收中断请求标志。在串行口允许接收时,每接收完一个才行帧,硬件置位RI。CPU响应中断时不会自动清除RI,需软件清零。

    3、中断允许寄存器(IE)

    IE(0A8H)
    地址0AFH0AEH0ADH0ACH0ABH0AAH0A9H0A8H
    符号EA保留ET2ESET1EX1ET0EX0
    • EA:中断允许总控制位。EA=1,启用所有中断;EA=0,屏蔽所有中断。
    • ES:串行口中断允许位。ES=1,允许串行口中断;ES=0,禁止串行口中断。
    • EX1:外部中断1中断允许位。EX1=1,允许外部中断1中断;EX1=0,禁止外部中断1中断。
    • EX0:外部中断0中断允许位。EX0=1,允许外部中断0中断;EX0=0,禁止外部中断0中断。
    • ET2:定时器/计数器T2的溢出中断允许位。ET2=1,允许T2中断;ET2=0,禁止T2中断。
    • ET1:定时器/计数器T1的溢出中断允许位。
    • ET0:定时器/计数器T0的溢出中断允许位。

    4、中断优先级寄存器(IP)

    80C51有两个中断优先级,即高优先级和低优先级。中断优先级寄存器IP中有各个中断的优先级控制位,控制位为1,相应的中断源则为高级中断,控制位为0,相应的中断源则为低级中断。IP的格式如下:

    IP(0B8H)
    地址0BFH0BEH0BDH0BCH0BBH0BAH0B9H0B8H
    符号保留保留PT2PSPT1PX1PT0PX0

    PT2、PS、PT1、PX1、PT0、PX0分别是定时器/计时器2、串行口中断、定时器/计时器1、外部中断1、定时器/计时器0、外部中断0的优先级控制位。在同一优先级的中断请求遵循自然优先级。

    中断源
    中断源中断标志自然优先级入口地址
    外部中断0IE0最高0003H
    定时器/计时器0TF0第2000BH
    外部中断1IE1第30013H
    定时器/计时器1TF1第4001BH
    串行口中断RI或TI第50023H
    定时器/计时器2TF2或EXF2最低002BH
    展开全文
  • 中断允许寄存器IE、IE2和INT_CLKO IE:中断允许寄存器(可位寻址) SFR name bit B7 B6 B5 B4 B3 B2 B1 B0 IE name EA ELVD EADC ES ET1 EX1 ET0 EX0 EA:CPU的总中断允许位,EA=1,CPU开放中断,EA=0,CPU...
  • stm32中断相关寄存器

    2021-02-18 21:40:53
    STM32_NVIC寄存器详解 ... //2个32位中断使能寄存器分别对应到60个可屏蔽中断 u32 RESERVED0[30]; vu32 ICER[2]; //2个32位中断除能寄存器分别对应到60个可屏蔽中断 u32 RSERVED1[30]; vu32 IS
  • S3C2440中断寄存器

    2021-07-10 14:13:50
    文章目录1、中断分两大类2、外部中断3、内部中断4、各寄存器关系5、中断过程6、中断的开启7、中断的清除 1、中断分两大类 内部中断和外部中断。 2、外部中断 24个外部中断占用GPF0 - GPF7(EINT0 - EINT7),GPG0 - ...
  • Arduino寄存器中断

    2021-03-26 09:42:21
    } /* 注:比较匹配中断最好不要使用相位矫正模式,且OCR的设置大小对于频率区别也不大 时间计算:16000000/1024/256 = 61HZ 1/61秒 */ void loop(){ } ISR(TIMER2_COMPA_vect){ // 设置定时器比较匹配A中断 ...
  • CM3 内核支持 256 个中断,其中包含了 16 个内核中断和 240 个外部中断,并且具有 256 级的可编程中断设置。 但 STM32 并没有使用 CM3 内核的全部东西,而是只用了它的一部分。 STM32 有 84 个中断,包括 16 个...
  • *工程模板(寄存器版本) */ #include "stm32f10x.h" /** * 主函数 */ int main(void) { // 开启GPIOB 端口时钟 RCC_APB2ENR |= (1<<3); //清空控制PB0的端口位 GPIOB_CRL &= ~( 0x0F<< (4...
  • 直接对STM32的寄存器操作来配置外部中断
  • 本节介绍TIM的定时器更新中断。工程采用STM32 CubeMX生成代码+寄存器操作的方式。 首先看下生成代码的的STM32 CubeMX参数配置页面。 参数配置很简单: Clock Source:Internal Clock ##使用Internal Clock是时...
  • 目录基本知识框架课堂笔记SysTick定时器简介什么是SysTick定时器SysTick定时器的作用SysTick寄存器CTRL控制及状态寄存器RELOAD重装载数值寄存器VALUE当前数值寄存器CALIB校准数值寄存器SysTick实战需求软件设计和...
  • 设置中断优先级寄存器,当有外部中断0请求中断时,中断程序执行发光二极管程序,在此过程中,外部中断1也有中断请求,外部中断0的中断程序将被中断去执行外部中断1的中断程序(数码管加1显示程序)。 #include<...
  • 4. 按键外部中断
  • 1、Request sources(with sub -register)中的中断源被触发之后,SUBSRCPND寄存器中相应位被置为1,如果要屏蔽掉某个中断源,INTSUBMSK寄存器中相应位被置为1。如果没有被INTSUBMSK寄存器屏蔽的中断源,SRCPND寄存器...
  • STM32的中断控制是分级管理的,CM3内核中的NVIC是顶层,对每个通道都设有1BIT的中断挂起位, 但每个通道可能不止一个中断源,比如EXTI5_9_IRQn,对NVIC而言,只算一个通道,但实际包含有5个中断源, 因此,下层就...
  • AIRCR寄存器进行配置。如图所示: 然后在设置相应的抢占优先级和响应优先级。 3.抢占优先级和响应优先级的区别: 抢占优先级为0的高于抢占优先级为1的,抢占优先级0>1>2>3>4。 响应优先级同理。 4. ...
  • 分析其中的CPU:(ALU、寄存器组、控制单元是必要的,其他非必要) 一个完整的CPU: 将ALU拿出来: 分析其中的Quiz: ① A + B = C 操作数:A B;运算:+;运算结果:C; 标志位:比如说用10+9=19,19...
  • 1. 查看寄存器 (gdb) i r (gdb) i r a # 查看所有寄存器(包括浮点、多媒体) (gdb) i r esp (gdb) i r pc 2. 查看内存 (gdb) x /wx 0x80040000 # 以16进制显示指定地址处的数据 (gdb) x /8x $esp (gdb) x /16x $esp...
  • 根据需要的边沿检测设置2个触发寄存器,同时在中断屏蔽寄存器的相应位写’1’允许中断请求。当外部中断线上发生了期待的边沿时,将产生一个中断请求,对应的挂起位也随之被置’1’。在挂起寄存器的对应位写’1’,将...
  • primask暂时屏蔽中断寄存器 在许多应用中,需要暂时屏蔽所有的中断一执行一些对时序要求严格的任务,这个时候就 可以使用 PRIMASK 寄存器,PRIMASK 用于禁止除 复位、NMI(不可屏蔽中断) 和 HardFalut(硬故障寄存器) 外...
  • 8259A中断控制器

    2021-08-01 04:51:46
    8259A芯片是一个中断管理芯片,中断的来源除了来自于硬件自身的NMI中断和来自于软件的INT n指令造成的软件中断之外,还有来自于外部硬件设备的中断,这些中断是可屏蔽的。这些中断也都通过可编程中断控制器PIC...
  • CM4/CM7 内核支持256个中断,其中包含了16个内核中断和240个外部中断,并且具有256级的可编程中断设置。 STM32F4/F7并没有使用CM4内核的全部东西,而是只用了它的一部分。 STM32F40xx/STM32F41xx总共有92个中断。10...
  • 介绍了ARM的工作模式、中断源、中断优先级和标志寄存器
  • 可以参考《STM32参考手册(寄存器版本)》“sys.h"的中断管理函数 。 外部中断的步骤: 1.初始化IO口(仿照前面所学的LED实验中的初始化,原理相同) 2.开启IO复用时钟并设置触发条件。 这里用到的函数为void Ex_NVIC...
  •   STM32中外部中断普遍有20个以上,其中有16个中断线对应着16个GPIO口,其余的中断线连接在比如RTC闹钟,PVD输出等事件上,这些外部中断通过EXTI寄存器管理,这些中断事件可以通过外部IO触发,内部事件触发,还...
  • 本文是讲解直接用寄存器的外部中断实验代码,所以关于概念,不熟悉的可以点击下方连接学习中断概念。 https://blog.csdn.net/gelad_w/article/details/115800545 本次实验目标: 按下KEY2红灯DS0反转 按下KEY1绿灯...
  • 中断允许寄存器IE的作用,是控制所有中断源的开放或禁止,以及每个中断源是否被允许。寄存器IE的位格式如下: EX0:外部中断0允许位。EX0=1,允许外部中断0中断;EX0=0,禁止外部中断0中断。 ET0:T0溢出中断允许位...
  • 51单片机串口中断功能的设置

    千次阅读 2021-01-15 16:07:43
    既然和外界需要“交互”,就必须使用“中断”功能,所以一般串口和中断是配合使用的。 在总结串口使用方法之前需要对一些基本概念进行理解 第一. 关于波特率(baud rate)的解释,网上有很多文章,以我个人的肤浅...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 183,712
精华内容 73,484
关键字:

中断寄存器的设置