2440LED点灯、K1~K6按键、24401中断、2440时钟

2024-04-15 04:20

本文主要是介绍2440LED点灯、K1~K6按键、24401中断、2440时钟,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

我要成为嵌入式高手之4月12日ARM第七天!!
————————————————————————————

2440GPIO

GPIO:通用目的输入输出

LED

要把GPBCON初始化

地址是固定的,可以当做无符号int型

控制所有灯就需要初始化GPBCON5.6.7.8

#include "led.h"void led_init(void)
{unsigned int t = 0;t = GPBCON;t &= ~((3 << 10) | (3 << 12) | (3 << 14) | (3 << 16));t |= (1 << 10) | (1 << 12) | (1 << 14) | (1 << 16);GPBCON = t;	
}void ledAllOn(void)
{GPBDAT &= ~(0x0F << 5);//低电平打开
}void ledAllOff(void)
{GPBDAT |= (0x0F << 5);//高电平关闭
}void ledAllNor(void)
{GPBDAT ^= (0x0F << 5);
}void delay(unsigned int n)
{	while (n--);
}//关闭看门狗定时器
void wdt_init(void)
{WTCON &= ~(1 << 5);
}void ledOn(unsigned char n)
{unsigned int t = 0;n &= 0x0F;t = GPBDAT;t &= ~(0x0F << 5);	t |= n << 5;GPBDAT = t;
}

main.c

#include "led.h"int main(void)
{wdt_init();led_init();ledAllOff();while (1){ledAllNor();delay(0x3FFF);ledOn(8);delay(0x3FFF);}
}

按键

首先初始化GPEGCON

K1与K6有上拉电阻,故应将附加上拉电阻功能禁止

GPGUP |= (1 << 0);

#include "key.h"void key_init(void)
{GPGCON &= ~((3 << 0) | (3 << 6) |(3 << 10) | (3 << 12) | (3 << 14) | (3 << 22));GPGUP |= (1 << 0);//第一个按键和最后一个按键有物理上拉电阻,故在此将附加上拉功能禁止
}int key_press(void)
{if ((GPGDAT & (1 << 0)) == 0){return 1;}else if ((GPGDAT & (1 << 3)) == 0){return 2;}else if ((GPGDAT & (1 << 5)) == 0){return 4;}else if ((GPGDAT & (1 << 6)) == 0){return 8;}else if ((GPGDAT & (1 << 7)) == 0){return 9;}else if ((GPGDAT & (1 << 11)) == 0){return 10;}return 0;
}

main.c

int main(void)
{wdt_init();led_init();key_init();ledAllOff();while (1){//ledOn(key_press());}
}

2440中断

中断处理流程

1、中断源发出中断请求

2、CPU查询是否允许中断和该终端是否被屏蔽

3、CPU查询中断优先级

4、保护现场(和栈有关)

5、执行中断函数

6、恢复现场


        外部中断的60个中断源最后经过筛选,比较,最终将中断请求交给920T内核;然后920T内核通过FIQ异常或者IRQ异常来采取措施最终实现中断。(由于我写的startup.s用的是IRQ异常,故将中断处理为IRQ异常)

要初始化的寄存器

中断模式(INTMOD)寄存器

需要置0改为IRQ模式

中断屏蔽(INTMSK)寄存器

需要置0改为可服务模式

此外,还需要设置GPIO,改为中断模式

GPGCON寄存器

EXTINTn(外部中断控制寄存器 n)

控制中断如何发生(上升沿、下降沿……)

EINTMASK(外部中断屏蔽寄存器)

至此初始化流程完成
———————————————————————————————————————————

中断服务函数

进入中断服务函数后要查询中断源的寄存器:

中断偏移(INTOFFSET)寄存器

        写在中断处理函数中(interrupt_handle)

        中断偏移寄存器中的值表明了是哪个 IRQ 模式的中断请求在 INTPND 寄存器中。此位可以通过清楚 SRCPND 和 INTPND 自动清除。

判断完之后读GPIO中的寄存器确定到底是哪个中断源

EINTPEND(外部中断挂起寄存器)

写在中断详细处理方案函数中(eint_handle)

用来查询是哪个中断源,且需要软件写“1”清零

1:发生中断        0:不发生中断

源挂起(SRCPND)寄存器

写在中断处理函数中(interrupt_handle)

中断处理完成后需要清除那些数据中被设置为 1 的相应 位置的 SRCPND 位。

中断挂起(INTPND)寄存器

写在中断处理函数中(interrupt_handle)

必须在中断服务程序中清除了 SRCPND 寄存器后清除此寄存器。

//中断初始化
void eint_init(void)
{//设置中断INTMOD &= ~(1 << 5);INTMSK &= ~(1 << 5);//设置GPIOGPGCON |= (2 << 0);//设置外部中断触发方式EXTINT1 |= (2 << 0);//设置外部中断使能EINTMASK &= ~(1 << 8);
}
//中断处理函数
void eint_handle(void)
{if ((EINTPEND & (1 << 8)) != 0){key = 1;}EINTPEND = EINTPEND;//指定位写1,用来清零
}//中断服务函数
void interrupt_handle(void)
{switch(INTOFFSET){case 5:eint_handle();break;default:break;}SRCPND = SRCPND;INTPND = INTPND;	
}

2440时钟

注意是时钟,不是实时时钟

这里的时钟指的是处理器运算时的主频(即程序运行一条指令所需要的时间)

实时时钟是一个表,可以记录 年 月 日 时 分 秒

PLL(phase lock loop)锁相环电路:

作用:倍频作用

时钟发生模块框图


时钟发生模块框图

step1:配置PLL(MPLL)

1、先清零MDIV . PDIV . SDIV

2、后填数设置倍频为400M

step2:配置时钟分频控制(CLKDIVN)寄存器

配置之前要查询摄像头时钟分频(CAMDIVN)寄存器

这篇关于2440LED点灯、K1~K6按键、24401中断、2440时钟的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/904837

相关文章

第10章 中断和动态时钟显示

第10章 中断和动态时钟显示 从本章开始,按照书籍的划分,第10章开始就进入保护模式(Protected Mode)部分了,感觉从这里开始难度突然就增加了。 书中介绍了为什么有中断(Interrupt)的设计,中断的几种方式:外部硬件中断、内部中断和软中断。通过中断做了一个会走的时钟和屏幕上输入字符的程序。 我自己理解中断的一些作用: 为了更好的利用处理器的性能。协同快速和慢速设备一起工作

FreeRTOS学习笔记(四)Freertos的中断管理及临界保护

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、Cortex-M 中断管理1.1 中断优先级分组1.2 相关寄存器1.3 相关宏定义1.4 FreeRTOS 开关中断 二、临界段及其保护2.1 taskENTER_CRITICAL( ) 和 taskEXIT_CRITICAL( )2.2 taskENTER_CRITICAL_FROM_ISR( )

独立按键单击检测(延时消抖+定时器扫描)

目录 独立按键简介 按键抖动 模块接线 延时消抖 Key.h Key.c 定时器扫描按键代码 Key.h Key.c main.c 思考  MultiButton按键驱动 独立按键简介 ​ 轻触按键相当于一种电子开关,按下时开关接通,松开时开关断开,实现原理是通过轻触按键内部的金属弹片受力弹动来实现接通与断开。  ​ 按键抖动 由于按键内部使用的是机

Cortex-A7:ARM官方推荐的嵌套中断实现机制

0 参考资料 ARM Cortex-A(armV7)编程手册V4.0.pdf ARM体系结构与编程第2版 1 前言 Cortex-M系列内核MCU中断硬件原生支持嵌套中断,开发者不需要为了实现嵌套中断而进行额外的工作。但在Cortex-A7中,硬件原生是不支持嵌套中断的,这从Cortex-A7中断向量表中仅为外部中断设置了一个中断向量可以看出。本文介绍ARM官方推荐使用的嵌套中断实现机

外部中断的边缘触发和电平触发

MCS-51单片机中的边缘触发是指当输入引脚电平由高到低发生跳变时,才引起中断。而电平触发是指只要外部引脚为低电平就引起中断。         在电平触发方式下,当外部引脚的低电平在中断服务返回前没有被拉高时(即撤除中断请求状态),会引起反复的不需要的中断,造成程序执行的错误。这类中断方式下,需要在中断服务程序中设置指令,清除外部中断的低电平状态,使之变为高电平。

3.门锁_STM32_矩阵按键设备实现

概述 需求来源: 门锁肯定是要输入密码,这个门锁提供了两个输入密码的方式:一个是蓝牙输入,一个是按键输入。对于按键输入,采用矩阵按键来实现。矩阵按键是为了模拟触摸屏的按键输入,后续如果项目结束前还有时间就更新为触摸屏按键输入。 矩阵按键开发整体思路: 由于矩阵按键就是GPIO的控制,所以不进行芯片和设备的分层编写,控制写在同一个文件中,最终向应用层提供一个接口。 代码层级关系:

油表加速器时钟屏保 就是这么酷酷的

太酷了!这个时钟屏保太有个性了!油表加速器时钟屏保,模拟汽车加速表盘,非常有质感,用它做屏保,简直就是酷毙了~!今天小编给大家分享一个非常实用好看的时钟屏保(芝麻时钟),官网地址(https://clock.zhimasoft.cn/?bili) 芝麻时钟-油表加速器时钟屏保 我们一起来看下,油表加速器表盘时钟屏保是怎么设置的? 1、打开芝麻时钟软件,找到"时钟屏保"菜单,点击后打开;(

彩虹数字屏保时钟 芝麻时钟开启个性化的时代 屏保怎么能少它

彩虹数字屏保时钟 芝麻时钟开启个性化的时代 屏保怎么能少它?电脑屏保多样化,让大家有了更多的选择,让更多人有机会把自己的电脑打扮得漂漂亮亮,今天小编给大家推荐:芝麻时钟(官网下载地址:http://clock.zhimasoft.cn/?bili),一起看下怎么开启彩虹数字时钟屏保吧! 彩虹数字屏保时钟 1、先下载芝麻时钟到电脑,可以百度,或者微软应用商城搜索“芝麻时钟”下载;

【Java编程思想】线程的基本协作机制 与 线程的中断

wait/notify Java在Object类中定义了一些线程协作的基本方法,wait和notify public final void wait() throws InterruptedException;public final native void wait(long timeout) throws InterruptedException; 一个带时间参数,单位是毫秒,表示最

基于IMX6ULL的Cortex-A中断原理讲解,以及编写其中断向量表

首先借助STM32我们需要了解中断系统是如何构成的         会有一个中断源,也就是能够向CPU发出中断请求的设备或事件。中断源不分硬件和软件,也就是产生中断信号,就会执行中断服务函数         但是CPU是如何知道中断源产生后就找到对应的中断服务函数呢,这个时候就要引入中断向量表,它的主要功能是描述中断对应的中断服务函数,每个中断源都有一个唯一的中断号(也称向量号),