ARM Exynos4412 硬件中断和GIC管理、PWM控制 6.28

news2024/12/23 23:49:20

day7
在这里插入图片描述

1.中断

硬件中断:直接让外部的硬件产生中断,CPU获取中断源并执行异常处理流程

1.需求:(中断的原理一样,但外设是按键)按键产生中断,并在中断处理中串口发送消息
2.原理图:
	UART_RING --> key2 --> 按键按下会有电平变化
	GPX1_1 --> 功能复用为 XEINT9
	
3,芯片手册:
	GPIO:
	GPX1_1:    0x11000C20  [7:4]  0xF = EXT_INT41[1]
	
	
	EXT_INT41_CON[1] 0x11000E04 [6:4] 0x2 = Triggers Falling edge
	EXT_INT41_MASK  0x11000F04  [1]  0x0 = Enables Interrupt
	EXT_INT41_PEND  0x11000F44  [1]  0x1 = Interrupt Occurs ?

GIC中断管理:

中断ID号: 25(只包含SPI)–>57(包含SGI 和PPI)

The Distributor provides a programming interface for:
分发器做的事情

1. Enabling the forwarding of interrupts to the CPU interfaces globally.
使能到 CPU interface的功能
ICDDCR   0x10490000 [0] 1 = GIC monitors the peripheral interrupt signals and forwards pending interrupts to the CPU interfaces.

2. Enabling or disabling each interrupt.
使能某一个中断
ICDISER1 0x10490104 [25] 1 = Enables the corresponding interrupt.

3. Setting the priority level of each interrupt.
设置每一个中断的优先级
ICDIPR14 0x10490438 [15:8]  0x1   0~255

4. Setting the target processor list of each interrupt.
设置要去哪个处理器
ICDIPTR14 0x10490838 [15:8]  0x1  =CPU interface 0

5. Setting each peripheral interrupt to be level-sensitive or edge-triggered.
设置外设中断怎么触发 //寄存器只读,所以不用
6. Setting each interrupt as either secure or Non-secure if the GIC implements the Security Extensions.
安全模式 //不用
7. Sending an SGI to one or more target processors.
设置软件中断 //不用

清除中断标志:

ICDICPR1:0x10490284  [25]  1=For SPIs, the corresponding 
interrupt is pending on at least one processor.

CPU interface:

Each CPU interface block provides:
 Interface for a processor that operates with the GIC.
 Programming interface for:
CPU interface做的事情:

1. Enabling the signaling of interrupt requests by the CPU interface.
使能CPU interface通道,让interface能够与CPU链接
ICCICR_CPU0 0x10480000 [0] 1 = Enables signaling of interrupts

2. Acknowledging an interrupt.
应答中断(中断处理前)
ICCIAR_CPUn  0x1048000C [9:0]  return interrupt ID(保存应答的ID)
 
3. Indicating completion of the processing of an interrupt.
应答中断(中断处理后)
ICCEOIR_CPUn  0x10480010 [9:0] (告知CPU保存的ID这个中断执行结束)

4. Setting an interrupt priority mask for the processor.
设置优先级掩码
ICCPMR_CPUn 0x10480004 [7:0] 0~255

5. Defining the preemption policy for the processor.
定义抢占策略    //不用
6. Determining the highest priority pending interrupt for the processor.
 //不用
/*===============================================
*   文件名称:main1.h
*   创 建 者: memories
*   创建日期:2023年06月28日
*   描    述:have a nice day
================================================*/
#ifndef __main_H_
#define __main_H_


#define GPA1CON    *(volatile unsigned int *)0x11400020

#define ULCON2     *(volatile unsigned int *)0x13820000
#define UCON2      *(volatile unsigned int *)0x13820004
#define UTRSTAT2   *(volatile unsigned int *)0x13820010
#define UTXH2      *(volatile unsigned int *)0x13820020
#define URXH2      *(volatile unsigned int *)0x13820024
#define UBRDIV2    *(volatile unsigned int *)0x13820028
#define UFRACVAL2  *(volatile unsigned int *)0x1382002C

#define GPX1_1         *(volatile unsigned int *)0x11000C20
#define EXT_INT41_CON  *(volatile unsigned int *)0x11000E04
#define EXT_INT41_MASK *(volatile unsigned int *)0x11000F04
#define EXT_INT41_PEND *(volatile unsigned int *)0x11000F44

#define ICDDCR    *(volatile unsigned int *)0x10490000
#define ICDISER1  *(volatile unsigned int *)0x10490104
#define ICDIPR14  *(volatile unsigned int *)0x10490438
#define ICDIPTR14 *(volatile unsigned int *)0x10490838

#define ICDICPR1  *(volatile unsigned int *)0x10490284

#define ICCICR_CPU0  *(volatile unsigned int *)0x10480000
#define ICCIAR_CPUn  *(volatile unsigned int *)0x1048000C
#define ICCEOIR_CPUn *(volatile unsigned int *)0x10480010
#define ICCPMR_CPUn  *(volatile unsigned int *)0x10480004


void GIC_init();
void UART_init();
void interrupt_init();
void send_str();

#endif



/*===============================================
*   文件名称:main1.c
*   创 建 者: memories
*   创建日期:2023年06月28日
*   描    述:have a nice day
================================================*/
#include "main1.h"

int main(int argc, char *argv[])
{ 
     UART_init();
     GIC_init();
     interrupt_init();
     while(1);
} 


void UART_init()
{
    //设置波特率
    UBRDIV2 = 53;
    UFRACVAL2 = 4;
    //设置串口的工作模式
    GPA1CON &= ~(0xf << 4);
    GPA1CON |= (0x2 << 4);
    //设置UART属性
    ULCON2 = 0x3;

    UCON2 &= ~(0x3 << 2);
    UCON2 |= 1 << 2; //开启发送轮循模式

}
void GIC_init()
{
    ICDDCR |= 0x1;
    ICDISER1 |= 1 << 25;
    ICDIPR14 &= ~(0xff << 8);
    ICDIPR14 |= (0x1 << 8);
    ICDIPTR14 &= ~(0xff << 8);
    ICDIPTR14 |= (0x1 << 8);
    
    ICCICR_CPU0 |= 0x1;
    ICCPMR_CPUn = 255;
}

void interrupt_init()
{
    GPX1_1 |= 0xf << 4;

    EXT_INT41_CON &= ~(0x7 << 4);
    EXT_INT41_CON |= 0x2 << 4;

    EXT_INT41_MASK &= ~(1 << 1);
}

void do_irq()
{
   int data = ICCIAR_CPUn & 0x3ff;
    send_str();
    EXT_INT41_PEND |= 1 << 1;
    ICDICPR1 |= 1 << 25;
    ICCEOIR_CPUn = data;
}

void send_str()
{
    int i = 0;
    char *p = "press\n\r";
    while(p[i] != '\0')
    {
        while(! (UTRSTAT2 & 1<<2));
        UTXH2 = p[i];
        i++;
    }
}



2.pwm

在这里插入图片描述

1.需求:蜂鸣器响起来
2.原理图:
	MOTOR_PWM <--> GPD0_0
3.芯片手册
	GPIO:
	GPD0CON 0x114000A0 [3:0] 0x2 = TOUT_0  //PWM功能
	
	PWM:
	TCONn:可以使能
	TCNTBn:给递减计数器赋初值,以及重新装载计数器
	TCMPBn:比较值
	
Timer Input Clock Frequency = PCLK/({prescaler value + 1})/{divider value}

	TCFG0:0x139D0000 [7:0] 1~255 Prescaler 0 value for timer 0 and 1
	TCFG1: 0x139D0004 [3:0] 0010 = 1/4 div4分频
	TCON: 0x139D0008 [3] 1 = Interval mode (auto-reload)
					 [2] 1 = TOUT_0 inverter-on?
					 
					 [1] 1 = Updates TCNTB0 andTCMPB0
					 		0 = No operation 先置一再置0
					 		
					 [0] 1 = Starts Timer 0				 
	TCNTB0:0x139D000C [31:0] 自动装载值
	TCMPB0:0x139D0010 [31:0] 比较值
/*===============================================
*   文件名称:main2.h
*   创 建 者: memories
*   创建日期:2023年06月28日
*   描    述:have a nice day
================================================*/
#ifndef __main2_H_
#define __main2_H_

#define GPD0CON  *(volatile unsigned int *)0x114000A0 
#define TCFG0  *(volatile unsigned int *)0x139D0000
#define TCFG1  *(volatile unsigned int *)0x139D0004
#define TCON  *(volatile unsigned int *)0x139D0008 
#define TCNTB0  *(volatile unsigned int *)0x139D000C
#define TCMPB0  *(volatile unsigned int *)0x139D0010 

void pwm_init();
void pwm_on();


#endif


/*===============================================
*   文件名称:main2.c
*   创 建 者: memories
*   创建日期:2023年06月28日
*   描    述:have a nice day
================================================*/
#include "main2.h"

int main(int argc, char *argv[])
{
     pwm_init();
     pwm_on();
     while(1);
} 

void pwm_init()
{
    GPD0CON &= ~(0xf); 
    GPD0CON |= (0x2);

    TCFG0 |= 0xff;
    TCFG1 &= ~(0xf);
    TCFG1 |= (0x2);

    TCNTB0 = 3000;
    TCMPB0 = 1500;

    TCON |= 1 << 3;
    TCON |= 1 << 2;
    TCON |= 1 << 1;
    TCON &= ~(1 << 1);
    
}
void pwm_on()
{
    TCON |= 1;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/702235.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Mysql 5.6使用配置文件my.ini来设置长时间连接数据库

对于已经安装了mysql和未安装都是同样的步骤。在C:\Program Files (x86)\MySQL\MySQL Server 5.6下生成一个my.ini文件。然后删除或者修改my-default.ini的名字。 一、my.ini配置文件如下 [mysqld] basedirC:\Program Files (x86)\MySQL\MySQL Server 5.6 datadirC:\Program F…

STM32F407 基本定时器使用

介绍STM32F407基本定时器的配置方法&#xff0c;分别介绍轮询方式、中断方式使用定时器完成定时。 【1】定时器介绍 定时器相关的章节在STM32F4xx参考手册第14、15、16、17章节。 【2】基本定时器配置示例 增加一个Timer.c文件&#xff0c;代码如下 #include "timer.h…

【sql】SQL回顾总结,超级全

SELECT&#xff1a;语句用于从数据库中选取数据 从 "Websites" 表中选取 "name" 和 "country" 列 SELECT name,country FROM Websites 从 "Websites" 表中选取所有列 SELECT * FROM Websites; SELECT DISTINCT&#xff1a;用于返…

Nacos(一):简介 如何安装 服务注册与发现 集群 权重 与Eureka区别

一、简介 1、应用场景 当服务调用越来越多&#xff0c;服务的地址需要管理起来&#xff0c;并实现动态调用而不是硬编码在接口中。此时需要一个注册中心来帮助我们管理服务。 流程如下&#xff1a; 商品微服务注册IP和端口到注册中心订单微服务先从注册中心获取到商品微服务…

45 # 实现文件拷贝功能

下面实现边读边写的文件拷贝功能&#xff0c;这样不会淹没系统的可用内存&#xff0c;合理读写 const fs require("fs"); const path require("path");function copy(source, target, callback) {const SIZE 3;const buffer Buffer.alloc(SIZE);let r…

OPENCV 训练分类器一

第一步&#xff0c;安装OPENCV 见最新openCV-Python安装教程(opencv-python版本4.4.0, Python版本: 3.9)_python安装opencv_这个人不是画家的博客-CSDN博客 第二步&#xff0c;下面是修正过后的Python 将文件夹下面所有的图片转换成灰色小图像&#xff0c;用于存正片用的。…

Python几种字符串格式化方法

Python 字符串格式化方法 文章目录 Python 字符串格式化方法1.python中的字符串格式化--百分号 %2. 字符串格式化-数字精度控制 m.n3. 字符串格式化--快速写法 f"{变量}"4. 案例&#xff1a;股价计算小程序 1.python中的字符串格式化–百分号 % %的主要作用将数据转换…

android switch的使用

一、前言&#xff1a;很多app都有开关这个功能&#xff0c;开关控件的使用跟checkbox好像也差不多。 二、上代码 创建一个activity:SwitchDefaultActivity public class SwitchDefaultActivity extends AppCompatActivity implements CompoundButton.OnCheckedChangeListene…

vue(脚手架创建)代理解决跨域问题

目录 为什么会出现跨域问题 什么是跨域 Vue CLI Vue2解决跨域问题 不重写路径 重写路径 vue.config.js代码 Vue3解决跨域问题 ViteVue解决跨域问题 vite.config.ts代码 总结 为什么会出现跨域问题 出于浏览器的同源策略的限制。同源策略是一种约定&#xff0c;它是…

【新版系统架构】第七章-系统架构设计基础知识(基于架构的软件开发方法)

软考-系统架构设计师知识点提炼-系统架构设计师教程&#xff08;第2版&#xff09; 第一章-绪论第二章-计算机系统基础知识&#xff08;一&#xff09;第二章-计算机系统基础知识&#xff08;二&#xff09;第三章-信息系统基础知识第四章-信息安全技术基础知识第五章-软件工程…

【go】数据表转csv

文章目录 1 基本结构1.1 数据1.2 数据结构 2 代码3 tip 1 基本结构 1.1 数据 1.2 数据结构 2 代码 代码&#xff1a; package mainimport ("database/sql""encoding/csv""fmt"_ "github.com/go-sql-driver/mysql""log"&q…

element ui table某个单元格添加点击事件

1.创建表格 <el-table ref"multipleTable" :data"tableData" border > <el-table-column fixed type"selection" align"center"></el-table-column> <div v-for"(item,index) in columns" :key"i…

在开源经历中成长,让开发者成为创新主体

本文背景 积极推进“满天星”行动计划&#xff0c;促进开发者成长&#xff0c;重庆软件园产业学院“成长营”将聚焦“技术提升”“职业成长”“价值提升”等话题开展系列主题活动&#xff0c;赋能软件技术开发者更好发展、更快成长。本次直播访谈&#xff0c;聚焦在开源经历中成…

车载 Android开发面试习题

随着车联网技术的不断发展和普及&#xff0c;越来越多的汽车厂商开始使用 Android 操作系统作为车载娱乐和信息娱乐系统的核心。在这个趋势下&#xff0c;车载 Android 应用开发程序员的需求也日益增加。 像一些车企大厂不惜给出 30K~60K的高资&#xff0c;去广招这方面的技术人…

为未来“点亮”想象空间:无镉量子点

量子点电视的诞生引发了行业内的色彩科技革命&#xff0c;量子点电视使用色彩纯净的量子点背光技术&#xff0c;能够最真实地还原图像色彩&#xff0c;是虚拟增强现实技术和智能可穿戴显示设备的理想之选。 量子点又可称为纳米晶&#xff0c;是一种由 II-VI 族或 III-V 族元素…

matlab绘制栅格地图

学习了一下栅格地图在matlib中的表示方法&#xff0c;其实和很多都是差不多的。 参考 清除命令 % clc&#xff1a;清除命令窗口的内容&#xff0c;对工作环境中的全部变量无任何影响 % close all:关闭所有的Figure窗口 % clear all&#xff1a;清除工作空间的所有变量&#xff…

zookeeper之znode节点与acl权限设置

zookeeper之znode节点与acl权限设置 zookeeperznode节点节点类型节点属性节点监听 客户端命令行查看所有命令命令说明 acl权限设置scheme认证模型permission权限位acl相关命令ACL使用示例 客户端工具ZooInspectorPrettyZoo zookeeper ZooKeeper是Apache软件基金会的一个软件项目…

chatgpt赋能python:量化金融中的Python模型

量化金融中的Python模型 随着互联网的发展&#xff0c;金融行业也在不断地发生变化。量化金融是近年来崛起的一种新兴方式&#xff0c;它将数学、计算机科学和统计学等领域的理论和方法应用于金融领域中&#xff0c;以期望实现比传统投资更高的效益。其中&#xff0c;Python是…

计算机网络那些事之 MTU 篇 pt.2

哈喽大家好&#xff0c;我是咸鱼 在《计算机网络那些事之 MTU 篇 》中&#xff0c;咸鱼跟大家介绍了 MTU 是指数据链路层能够传输的最大数据帧的大小 如果发送的数据大于 MTU&#xff0c;则就会进行分片操作&#xff08;Fragment&#xff09;&#xff1b;如果小于 MTU&#x…