基于S3C6410的ARM11学习(六) 核心初始化之关闭所有中断

发布者:CuriousMind123最新更新时间:2021-02-20 来源: eefocus关键字:S3C6410  ARM11  核心初始化  关闭所有中断 手机看文章 扫描二维码
随时随地手机看文章

上一次,我们完成了核心初始化之关闭看门狗了。下面就要关闭所有中断了。因为这个时候还在初始化整个硬件环境,应用程序还没有开始跑,所以是不希望有中断产生来打断CPU工作的。


中断是嵌入式系统中很重要的东西了。因为有了这个东西,可以使CPU解放出来,做更多的事。


学单片机的时候,对于按键,我们可以采用轮询检测,隔一段时间就去检测看看按键有没有按下,有按下的话就进行处理。没有的话就跳过。而使用外部中断后,就不必检测了,外部中断会自动检测,就不用CPU检测了。当外部中断有效后,外部中断模块就会产生一个中断源给CPU,CPU检测到这个中断源,再去执行对应的中断处理函数。比轮询法效率要高很多了。


至于S3C6410的中断的具体的一些应用,等后面开发用到的时候再分析,这里只是关心怎么把所有中断给关闭掉。


在CPSR寄存器

clip_image002

后面有两位,第7位和第6位,就是I位和F位。


我们知道,在S3C6410中是有两种中断,一种普通中断,一种是快速中断。所以这关闭需要分开关闭。


I位:控制所有普通中断。相当于51单片机的EA位。要使用中断的话,这一位就必须要置0,注意,这里0是使能。我们这里是要关闭所有中断,所以这一位就要写1.


F位:控制快速中断。要使用快中断的话,这一位就必须要置0.也是注意,0才是使能。我们这里要关闭所有快中断,所以这一位要写1.


另外,我们还要把中断控制器的中断使能也给关掉。

clip_image004

上图是S3C6410的中断控制器


这里主要是VIC1和VIC0两个中断控制器,这两个控制S3C6410的64个中断。

clip_image006

clip_image008

截图就截取一部分。


第一列是中断的标号。表示这是第几个中断号。

第二列是中断源。表示这个中断的源是什么。

第三列是描述。说明这个中断是做什么的。

第四列是中断属于哪个中断控制器。VIC0就说明该中断属于VIC0中断控制器,VIC1就说明该中断属于VIC1中断控制器。所以要使用对应的中断的话,就要去找对应的中断控制器。


在VICx的若干寄存器里面,有下面两个寄存器,用来无效中断源。

 clip_image010

寄存器中的每一位对应相应的中断源。往寄存器里面写1,就屏蔽了对应的中断。


这里,我们要屏蔽所有中断,所以就直接往这两个寄存器里面写入全1.

知道我们怎么做后,剩下写代码就比较容易了。

   clip_image012

因为要对寄存器操作,所以第一步先定义要操作寄存器的地址。这里要操作两个寄存器,所以先用define对操作的两个寄存器的地址先定义一下。


使用ldr伪指令,将

代码,注释也很清楚了。


前面,是对时钟进行复位的。这里现在先不管,等到了时钟在分析。关心红色框框起来的部分。由于我使用的芯片没有定义#if判断的宏,所以就执行到空色框的部分。这里对RCC下的CIR寄存器进行配置。


查手册,这个寄存器都是和时钟中断有关的。就是将时钟的相关的中断清除以及关闭。


stm32通过调用这个函数,就关闭了中断和清除中断。但是这些中断都是对应时钟的。而没有对应外部中断以及一些外设的中断的。我认为的话,复位后,外部中断及外设的中断都是不使能的呢?为什么了,因为时钟没有开启。STM32比ARM11多了门控时钟这个东西。即每个外设都有对应的门控时钟,当要使用该外设的时候,要开启对应外设的时钟。复位的时候,外设时钟是默认关闭的。


这个就看外设时钟使能寄存器就可以了,外设的话,是挂在不同的总线上的,有的在AHB总线,有的在APB1,有的在APB2上,所以就有3个寄存器来配置各个总线对应的时钟使能。

      

这里,就以APB2外设时钟使能说明。


复位默认值是0x0,所以每一位都是0.从列表就可以看出,0就是对应功能的时钟关闭。比如位2为0,IO端口A时钟关闭。既然端口时钟都关闭了,那中断就不会有效果,因为中断信号都进不了CPU。


但是,这复位为什么要复位时钟的中断了,因为随后就要对时钟进行配置了。将时钟配置为72M。而不是内部时钟的8M。所以不关闭时钟的相关中断的话,配置的时候就会产生中断。


如上,就对STM32初始化的中断关闭就完成了。当然这一步不是我们写程序完成的,而是启动代码帮我们搞定的。

关键字:S3C6410  ARM11  核心初始化  关闭所有中断 引用地址:基于S3C6410的ARM11学习(六) 核心初始化之关闭所有中断

上一篇:基于S3C6410的ARM11学习(七) 核心初始化之关闭MMU和CACHE
下一篇:cortex-a8 uboot系列:第十七章 uboot移植-网卡DM9000移植

推荐阅读最新更新时间:2024-10-31 11:01

S3C6410中断以及外部中断
6410的中断系统: 嵌入式软件里的中断处理,除了中断初始化,主要工作就是编写ISR. 在嵌入式的SOC的CPU里,在CPU里内部会带一些设备模块,它们产生的中断称为内部中断。因为联线比较固定,因此编程比较简单。而且在物理上CPU分离的芯片产生的中断,称为外部中断,外部中断可以联接不同的中断脚上,因此需要对中断IO进行较复杂的配置。 轮询模式是否一无是处?轮询的优点是在重负荷的情况下,轮询比中断效率会高很多。比如一个教室很多学生不断的问问题,这样与其不断被中断,老师还不如起身在教室走动,随机处理学生问题会高很多。 异常(Exception) -----------------------------------
[单片机]
<font color='red'>S3C6410</font><font color='red'>中断</font>以及外部<font color='red'>中断</font>
基于ARM11的IMX35车载信息娱乐模块的开发
  车载信息娱乐系统(In-Vehicle Infotainment 简称IVI),是采用车载专用中央处理器,基于车身总线系统和互联网服务,形成的车载综合信息处理系统。IVI能够实现包括三维导航、实时路况、IPTV、辅助驾驶、故障检测、车辆信息、车身控制、移动办公、无线通讯、基于在线的娱乐功能及TSP服务等一系列应用,极大的提升的车辆电子化、网络化和智能化水平。 车载信息娱乐系统在汽车驾乘的舒适度上起到了决定性的作用,从而使得汽车娱乐系统在近些年得到了飞速发展。其中不仅有用户对多媒体娱乐的要求在逐步增高;而且由于汽车电子软硬件技术的不断发展,也使得各种各样的汽车娱乐系统应用实现成为可能。通过铜缆发送音频数据的简单音频系统已
[单片机]
基于<font color='red'>ARM11</font>的IMX35车载信息娱乐模块的开发
S3C6410之uboot回炉再造(5)设置堆栈与跳转至C入口
  直接切入主题   1、设置堆栈 1 skip_hw_init: 2 /* Set up the stack */ 3 stack_setup: 4 ldr r0, =CONFIG_SYS_UBOOT_BASE /* base of copy in DRAM */           //0x57e0_0000 5 sub r0, r0, #CONFIG_SYS_MALLOC_LEN /* malloc area */           //#define CONFIG_SYS_MALLOC_LEN  (CONFIG_ENV_SIZE +
[单片机]
串口驱动设计(基于S3C6410
串口通讯 串口充当的角色有两个,一个是数据传输,还有一个就是充当控制台。串口通讯分为同步和异步,我们通常使用的是异步串口。通讯时,双方先约定好数据帧的格式,即波特率,数据位,停止位,奇偶校验位等。我们通常使用的是RS232的9帧串口,其中,最重要的是2,3,5脚。 2:RXD接收数据 3:TXD发送数据 5:GND接地 接下来,我们开始进行串口的初始化。在此使用的开发板是飞凌S3C6410。初始化内容主要分为以下四个方面,引脚设置,帧格式设置,工作模式设置,波特率设置。 引脚设置 由核心板原理图上可找到RXD和TXD是通过GPA这个寄存器控制的,所以,在芯片手册中找到GPACON这个寄存器。 由芯片手册可得,只要设
[单片机]
串口驱动设计(基于<font color='red'>S3C6410</font>)
Linux下s3c6410的GPIO操作(2)
1、还接着看上一篇的这个函数 arch_initcall(s3c64xx_gpiolib_init); static __init int s3c64xx_gpiolib_init(void) { s3c64xx_gpiolib_add(gpio_4bit, ARRAY_SIZE(gpio_4bit), s3c64xx_gpiolib_add_4bit); s3c64xx_gpiolib_add(gpio_4bit2, ARRAY_SIZE(gpio_4bit2), s3c64xx_gpiolib_add_4bit2); s3c64xx_gpiolib_add(gpio_2bit, ARRAY_SI
[单片机]
linux串口终端驱动——s3c6410平台(三)
上一篇关注的是tty上层字符层面的操作和注册,这一篇主要关注线程的注册,如何与上层建筑联系起来。 一、 tty_ldisc.c提供了tty_register_ldisc()接口用于注册线路规程,例如/driver/char/n_tty.c文件则针对N_TTY线路规程实现了具体的tty_disc结构体中的成员。 tty_register_ldisc(N_TTY, &tty_ldisc_N_TTY) 其中有 #define N_TTY 0 struct tty_ldisc_ops tty_ldisc_N_TTY = { .magic = TTY_LDISC_MAGIC, .name = n_tt
[单片机]
基于口令识别的无线控制系统的设计
0 引言 语音是人类交流信息最自然、最方便、最有效的方法。用语音与机器交互是人类一直梦寐以求的事情。经过十几年的发展,基于隐马尔科夫模型的语音识别已经达到了应用要求。通过语音口令识别完成与机器交流变得顺其自然。人们与机器交流,大多是为了控制机器运作或获取其运行状态。目前应用广泛的总线控制系统,网络控制系统大多要求有数据线传送指令。无线通信技术让这种控制摆脱了地域的束缚。通过语音口令识别,机器“听懂”语音并将其“翻译”成指令,然后通过无线通信传输指令、控制远程智能车模式有着很好的应用前景。基于口令识别的控制系统与嵌入式系统有效结合,与未使用嵌入式系统比较更有便捷易用,显示出其优势作用。基于口令识别的无线控制嵌入式系统在可广泛应用
[单片机]
基于口令识别的无线控制系统的设计
LED:控制发光二极管
1、LED驱动实现原理,如图: 2、编写LED驱动 (1)创建LED驱动的设备文件   第一步:使用cdev_init函数初始化cdev   第二步:指定设备号   第三步:使用cdev_add函数将字符设备添加到内核中的字符设备数组中   第四步:使用class_create宏创建struct class   第五步:使用device_create函数创建设备文件   #define DEVICE_NAME s3c6410_leds   //定义设备文件名称   #define DEVICE_COUNT 1  //创建设备文件的数量   #define S3C6410_LEDS_MAJOR 0  //默认主设备号   #de
[单片机]
LED:控制发光二极管
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved