精华内容
下载资源
问答
  • S3C2440 的中断寄存器

    2011-07-22 19:18:01
    内部中断有8个寄存器,下面逐一来看。 寄存器: SUBSRCPND: 当一个中断发生后,那么相应的位会被置1,表示一个中断发生了。 INTSUBMSK: 与上一个是一伙的,中断屏蔽寄存器 INTMOD: 中断的方式。一个中断...
  • stm不是HAL库吗,为啥写寄存器版本的? 在arm里面可没有HAL库一说,都是直接操控寄存器,所以理解芯片手册很重要,当然HAL库很好用 这次解读的stm32 使用外部中断按键控制led灯的代码 开始使用源码分析 先进个main函数 ...

    stm不是有HAL库吗,为啥写寄存器版本的?

    在arm里面可没有HAL库一说,都是直接操控寄存器,所以理解芯片手册很重要,当然HAL库很好用
    这次解读的stm32 使用外部中断按键控制led灯的代码

    开始使用源码分析

    先进个main函数
    在这里插入图片描述
    看见我们的重要函数EXTIX_INIT();
    同时使用文档解读

    在这里插入图片描述
    简单来说
    1 初始化io口 :设置已经存在的状态
    2 让io口和中断线建立映射 :我们外部io中断只有5个,不可能每个io口都能触发
    3 设置什么时候io口会触发中断
    4 配置nvic(写arm好像没这么复杂啊)

    让io口初始化

    在这里插入图片描述
    #define PAin(n) BIT_ADDR(GPIOA_IDR_Addr,n) //控制PA(0)为输入
    #define WK_UP PAin(0) //看看PA(0)是不是输入

    分析 EXTI->PR=1<<0;
    EXTI 在芯片手册里查找
    在这里插入图片描述
    哎呀还没给base_address 没事继续上去查找
    进入寄存器地址
    在这里插入图片描述
    在这里插入图片描述
    所以base_address 就是 0x40013c00
    验证 进入教程的代码查看
    #define EXTI ((EXTI_TypeDef *) EXTI_BASE) // 在EXTI base_address 的基础上 构建一个结构体
    #define EXTI_BASE (APB2PERIPH_BASE + 0x3C00)//0x40013C00
    #define APB2PERIPH_BASE (PERIPH_BASE + 0x00010000)
    #define PERIPH_BASE ((uint32_t)0x40000000)
    把上面的地址找出来,和我们算的地址一样,芯片手册没看错

    我们接着设置 exit_pr
    在这里插入图片描述
    那么pr寄存器就是base_address + 0x14
    验证 在这个结构体里 pr的偏移值也是14
    在这里插入图片描述
    给我们的中断线1 初始化

    设置触发方式

    怎么又帮我把函数写好了,正真开发的时候,还是要自己写这样的函数的
    在这里插入图片描述
    1.使用sys时钟,
    2.清零外部中断寄存器
    3.在这个寄存器赋值,表示外部中断1,用PC中短线控制

    从芯片手册上看,要用外部中断源还是要配制时钟的外部中断寄存器
    Ex_NVIC_Config(GPIO_C,13,FTIR);
    13/4=3 放在外部中断寄存器3才能配置13口 = EXTICR[3]
    并且使用外部中断线1 清零我们的PC SYSCFG->EXTICR[BITx/4]&=~(0x000F0);
    配置我们的外部中断线1 接上PC[13] SYSCFG->EXTICR[BITx/4]&=~(0x04<<4);
    在这里插入图片描述
    在这里插入图片描述
    验证 打开debug 的watch窗口 用这个窗口查看变量值,确实这个值是0x04
    在这里插入图片描述
    同样 也是这个寄存器的发生了改变在这里插入图片描述

    展开全文
  • 1.sja1000的int引脚你先不连接 sja1000通电后(纯粹通电不运行程序)你测试一下int是否为高?...中断寄存器为0x01时中断引脚才会输出低电平呢。你现在要做的事是想法让中断寄存器为0x013.还有你是自接收...

    1.sja1000的int引脚你先不连接   sja1000通电后 (纯粹通电不运行程序) 你测试一下int 是否为高? 如果是高正常。

    2.sja1000的int引脚你先不连接   运行程序    你测试一下int 是否为低? 如果是低正常,说明你的单片机设置有问题。是否允许外部中断0了呢?

    中断寄存器为0x01时中断引脚才会输出低电平呢。你现在要做的事是想法让中断寄存器为0x01

    3.还有你是自接收模式 ?还是什么  ?你先设置自接收模式(退出复位模式时的指令为0X0C),看看单个节点是否工作正常     -----------------建议先看看第三条。一般自接收模式通过了就没问题了,你要先看自接收模式能够正常工作。先面是我的程序,不建议仔细看,看看复位和发送做哪些操作就行。(自接收测试模式)

    void SJA1000_Init(void)

    {

    GPIO_Set(Control_PORT,RST,0);     //   IO口复位

    //Delay_ms(10);                    //       .

    GPIO_Set(Control_PORT,RST,1);     //       .

    //Delay_ms(10);                    //       .

    CAN_write(0x00,0x09);   sja1000进入复位模式  单滤波器设置

    CAN_write(0x1f,0xc8);               ///PeliCAN 模式,时钟频率2分频...

    CAN_write(0x10,0x01);               //验收代码寄存器

    CAN_write(0x11,0x02);               //验收代码寄存器

    CAN_write(0x12,0x03);               //验收代码寄存器

    CAN_write(0x13,0x08);               //验收代码寄存器3

    CAN_write(0x14,0x00);               ///验收屏蔽寄存器0

    CAN_write(0x15,0x00);               ///验收屏蔽寄存器

    CAN_write(0x16,0x00);               ///验收屏蔽寄存器

    CAN_write(0x17,0x00);               ///验收屏蔽寄存器

    CAN_write(0x08,0x1a);               //设置输出管脚

    CAN_write(0x06,0x49);               //总线定时器0波特率预设值

    CAN_write(0x00,0x0C);               //退出复位模式

    }

    展开全文
  • 中断

    2017-04-20 00:05:49
    当单片机正在执行程序的时候,突然某个按键按下了(产生外部中断),单片机就必须得去处理那个按键(中断的响应),看看是发生了什么事,按键处理完后继续回来执行程序...在单片机里面中断特殊的功能寄存器控制

    当单片机正在执行程序的时候,突然某个按键按下了(产生外部中断),单片机就必须得去处理那个按键(中断的响应),看看是发生了什么事,按键处理完后继续回来执行程序(中断的返回)。

    同样,单片机正在执行程序的时候,内部的定时器溢出(定时器后面会单独讲到),或者检测到单片机的电压低于正常值等等(单片机内部产生的中断叫内部中断),单片机就得去处理这些事情,然后再返回来。
    

    在单片机里面,中断是有特殊的功能寄存器控制的,单片机里面一共有两个中断,一个是中断0,一个是中断1 ,和两个定时器T0,T1,定时器就是你打开它后,它会自动数数,当数到你给它限定的值时,它就会溢出,产生中断让CPU处理(就像一个桶,你打开水龙头后,水越来越多,当达到你需要的水位时,就会产生中断叫你去处理它)。这些我们先不深入了解他是什么东西,我们只需知道中断是用下面这几个关键词控制的就行了:


    IT0 声明外部中断0的类型,IT0=1是边沿触发,0是电平触发
    边沿触发就是当检测到外部电平发生变化,即由低变高,或者由高变低时,就会产生一个中断
    电平触发就是检测到高电平或者低电平时,产生中断

    IE0 外部边沿触发产生中断后,它的值会变1,当CPU响应后,会自动变为0

    IT1 和IT0一样的含义
    IE1 和IT0一样的含义

    EX0 外部中断0控制器,EX0=1是允许外部中断,0是禁止外部中断,也就是不理会外部中断
    ET0 这个是定时器中断控制器,ET1=1是允许定时器产生中断,0是禁止
    EX1,ET1的含义跟上面的都一样。
    EA 总中断控制器,1是允许有中断产生,0是禁止所有中断,就算天打雷劈也不理会

    *另外,还有一个中断优先级的控制器,就是控制是去帮妈妈拿东西的优先级高还是去撒尿的优先级高。

    PX0 外部中断0的优先级控制,假如内外都产生了中断,1就是优先处理外部中断,0就是优先处理内部中断

    PT0 定时器0优先级控制器,1就是优先相应定时器0

    PT1 定时器1优先级控制器,1就是优先相应定时器1

    还有个概念,就是***中断请求的撤销***,也就是说,产生中断后,会产生一个中断请求,为1,当CPU处理完中断后,必须清除这个请求,不然CPU又会认为这个中断没有处理又跑去处理它……
    
    对于两个定时器产生的中断,当CPU响应后,会自动清除TF0,TF1这两个定制器中断请求,处理完后就跳出来,回到原来的地方继续执行。
    

    对于外部中断INT0,INT1,如果中断类型是边沿触发,单片机会自动清除中断请求IE0,IE1

    若是电平触发,如果有一个电平,使中断产生后,这个电平仍然还保持着,那么这个电平还会触发中断,这样CPU就死在中断的石榴裙下出不来了。。。

    实验中按照助教所说,中断可能会产生累积,比如说在执行当前中断的过程中,外部又发生了中断,那么它就会排队,于是使用了CLR IE0来清楚中断执行过程中发生的扰动。

    /转载/

    展开全文
  • 一个是TXE一个是TC那就分别来讲下这两个中断有什么区别,才好最终做选择。第一个TXE中断,完整名称叫做Transmit data register empty,中文翻译:发送数据寄存器为空中断。如果使能了该中断并且在串口的发送寄存器...
    7fef4664a41bfd75065ceb3a4978c56f.png

    一般在stm32开发时候,串口接收中断用的比较多,发送的用的少。如果仔细看手册你也会发现实际上针对发送的中断有两个,那我们到底该用哪个中断呢?

    • 一个是TXE
    • 一个是TC

    那就分别来讲下这两个中断有什么区别,才好最终做选择。

    第一个TXE中断,完整名称叫做Transmit data register empty,中文翻译:发送数据寄存器为空中断。如果使能了该中断并且在串口的发送寄存器里面没有数据就会立马产生中断。

    第二个TC中断,完整名称叫做Transmission Complete,中文翻译:发送完成中断。如果使能该中断,那么在发送寄存器里面的数据被发送出去以后就会产生中断。

    乍一看两个是不是很像,好像都是和发送数据寄存器有关。实际上呢还是有略微的不同,最关键的就是TXE中断在没有发送数据的时候都可以产生。而TC呢是必须发送一个数据后才能产生。

    所以结论是两个中断都可以用来发送数据,只是流程稍有不同。

    具体流程可以看下图:

    44fc87785ad6d1ce40d792725c4b6c4f.png
    a3fff2ce97e177f609cdf133c024da11.png

    可以看到使用TXE中断的时候流程会稍微简化一些,所以我使用发送中断的时候大部分都会用TXE。这样我只用把数据一股脑丢到缓冲区,然后再打开TXE中断(这时候发送寄存器是空的)就可以直接进中断挨个把数据发送出去。

    但是使用TC一定需要先发送一个数据以后(这样才能有发送完成)才能进入中断。

    展开全文
  • 有一个变量IDT_DESCR,它存放在head_32.S,或者在64位系统中存放在head_64.S中,这里面有两个汇编语句,第一句表示中断描述符表包含256个中断描述符;第二句表示中断描述符的入口地址 如何对中断描述符初始化?在...
  • S5PV210外部中断

    2020-01-03 17:25:14
    210里面有很多种中断有内部中断有外部中断什么是内部中断和外部中断? SoC支持的中断类型中有一类叫外部中断。内部中断就是指的中断源来自SoC内部(一般是内部外设),譬如串口、定时器等部件产生的中断;外部...
  • PCI&PCIE MSI中断

    2019-05-23 09:13:59
    用简单的一句话就可以说明msi的原理:cpu一段特殊的寄存器空间,往这个寄存器里面写数据,就会触发cpu的中断。pci设备经过配置以后,一旦需要上报中断就会往cpu这种寄存器里面写一个值,触发cpu的中断。 2、PCI...
  • 1.3 PCI&PCIE MSI中断

    千次阅读 2017-10-11 20:44:03
    (Message Signaled Interrupts)用简单的一句话就可以说明msi的原理:cpu一段特殊的寄存器空间,往这个寄存器里面写数据,就会触发cpu的中断。pci设备经过配置以后,一旦需要上报中断就会往cpu这种寄存器里面写一个...
  • 今天做了一个中断的实验,感觉有点思路有点清晰了,...要看你开什么中断了,若要用FIQ/IRQ中断,则还要在启动代码里面改一下CPSR寄存器的控制位 2.若是开的IRQ中断,则还要向量和非向量IRQ之分。向量IRQ的话,要先选
  • stm32的.c文件的东西全都写在了.h里面,为什么还能不编译出错,下载在板子里也是对的,自己尝试过分成.c和.h文件,但是会报很多的错,怎么能分离出来呢? 部分代码如下: ``` static u8 fac_us=0;//us延时倍乘数 ...
  • 6410中的PWM 定时器

    2013-12-02 09:10:36
    看了OK6410的手册,感觉晕晕的。 需要整理一下思路。 ...3. 里面涉及的寄存器哪些。 各个寄存器的职责是什么。 1. 简单介绍 : S3C6410X中5个定时器,这些定时器产生内部中断。其中,T
  • 嵌入式工程师笔试题

    千次阅读 2012-06-29 08:18:47
    2. IRQ和FIQ有什么区别,在CPU里面是是怎么做的? Irq 普通中断 FIQ 快速中断 有自己的寄存器,省去寄存器内容存储的时间。 3.  int *a; char *b; a 和 b本身是什么类型? 本身应该
  • 可以是这样,先放一个空函数,不会有什么玄学问题 不信,嘿嘿????,你试试 2、SBUF发送/接收寄存器 这是个串口收发寄存器,教科书里面稀奇的是,接收、发送寄存器是两个寄存器,分别是接收寄存器、发送寄存器,不过...
  • 串口通讯中出现的错误(1)

    千次阅读 2018-04-17 22:11:00
    什么呢 源码如下: 原因如下:在数据寄存器和数据总线之间一个移位寄存器,接收数据是先把数据放在移位寄存器中,如果没有读取移位寄存器里面的数值的话,就不能继续接收数据了,因此,在接收到一次数据后,...
  •  操作系统中,每个进程会两个栈,一个用户栈,一个内核栈,当进程在用户空间运行时,CPU堆栈指针寄存器里面的内容是用户栈的地址,使用用户栈,当进程在内核空间运行时,CPU堆栈指针寄存器里面的内容是内核栈...
  • USART_ClearITPendingBith和 USART_ClearFlag的区别

    万次阅读 多人点赞 2018-07-02 09:00:38
    起初 stm32 v3.5 库函数里面,对于串口USART这样两个函数: USART_ClearFlag()和USART_ClearITPendingBit() 查库函数定义,说一个是清除标志,一个是...SR寄存器,但是这个寄存器只有一组标志位,没有什么中断...
  • 15.转子与中断最大的区别在什么地方? 16.子程序中最后一条指令是什么指令? 17. 用堆栈存放返回地址,则转子指令和返回指令都要使用的寄存器什么? 18.CPU内部的IR、PSW、PC、MAR、MBR的中文名称是什么?...
  • 虚拟总线有什么作用呢?以及怎么用linux虚拟总线子框架?这就是本文要阐述的两个问题。 Platform Bus的作用 简单来说,有以下三个作用: 加载平台资源信息,即将reg(控制器,寄存器地址,memery地址)、...
  • 其中包含很多部分,CPU,内存,磁盘等等,其中每个大部件里面又会包含很多小的部件,如果没有操作系统需要程序把计算机的各个部件全部研究清楚,比如I/O口高低电平,中断寄存器等等才能够使用,需要花费...
  • 在单片机中两个特殊功能寄存器与定时/计数有关,这就是TMOD和TCON。  顺便说一下,TMOD和TCON是名称,我们在写程序时就能直接用这个名称来指定它们,当然也能直接用它们的地址89H和88H来指定它们(其实用名称也...
  • 操作系统精髓与设计原理答案

    热门讨论 2011-11-19 15:15:08
    1.4、假设一个微处理器产生一个16位的地址(例如,假设程序计数器和地址寄存器都是16位)并且具有一个16位的数据总线。 a.如果连接到一个16位存储器上,处理器能够直接访问的最大存储器地址空间为多少? b.如果...
  • STM32 的输入捕获,简单的说就是通过检测 TIMx_CHx 上的边沿信号,在边沿信号发生跳变(比如上升沿/下降沿)的时候,将当前定时器的值(TIMx_CNT)存放到对应的通道的捕获/比较寄存器(TIMx_CCRx)里面,完成一次...
  • 因此这两个寄存器只在中断出现的时候派上用场,在一般情况下不影响程序的运行,而保存上下文的目的就是要保证中断处理完之后回到原来中断的地方程序能继续运行,从这个角度来看就不必保存这两个...
  • c语言编写单片机技巧

    2009-04-19 12:15:17
    什么事情都个经验的积累过程,循序渐进。 8. 请问作为学生,如何学好单片机? 答:学习好单片机,最主要的是实践,在实践中增长经验。在校学生的话,实践机会的确会比较少,但是机会的话,可以毕业实习...
  • (1)修改中断禁止部分 # if defined(CONFIG_S3C2410) ldr r1, =0x7ff /*根据 2410 芯片手册,INTSUBMSK 11位可用 */ ldr r0, =INTSUBMSK Create PDF files without this message by purchasing novaPDF ...
  • visual C++_Turbo C串口通信编程实践

    热门讨论 2010-07-30 09:14:24
    里面讲了MSComm控件 、 WinAPI 串口通信、CSerial类,例子很详实,每一步操作都解释。作者是龚建伟,一个个人主页www.gjwtech.com,讲串口通信的内容比较多,还行,大家可以先看看这个主页。 本书目录 第1章轻松...

空空如也

空空如也

1 2
收藏数 32
精华内容 12
关键字:

中断里面有什么寄存器