2024/5/22 ARMday7

按鍵控制LED燈亮和滅

do_irq.c

#include "key_it.h"
//#include "led.h"
extern void printf(const char *fmt, ...);
unsigned int i = 0;
void do_irq(void) 
{//獲取中斷號unsigned int irqno=(GICC->IAR & (0x3FF));switch (irqno){case 99://處理中斷GPIOE->ODR ^= (0x1<<8);//清除中斷隊列GICD->ICPENDR[3] |= (0x1<<3);//清除中斷掛起標志EXTI->FPR1 |= (0x1<<9);break;case 98://處理中斷GPIOE->ODR ^= (0x1<<10);//清除中斷隊列GICD->ICPENDR[3] |= (0x1<<2);//清除中斷掛起標志EXTI->FPR1 |= (0x1<<8);break;case 97://處理中斷GPIOF->ODR ^= (0x1<<10);//清除中斷隊列GICD->ICPENDR[3] |= (0x1<<1);//清除中斷掛起標志EXTI->FPR1 |= (0x1<<7);break;default:break;}//清除中斷號GICC->EOIR = irqno;
}


key_it.c

#include "key_it.h"//按鍵1初始化
void key1_init(){//使能GPIOF的RCC時鐘RCC->MC_AHB4ENSETR |= (0x1<<5);//配置PF9為輸入模式GPIOF->MODER &= (~(0x3<<18));//配置中斷選擇器EXTI9為PFEXTI->EXTICR3 &= (~(0xFF<<8));EXTI->EXTICR3 |= (0x05<<8);//配置為下降沿觸發EXTI->FTSR1 |= (0x1<<9);//使能中斷,關閉中斷屏蔽EXTI->C1IMR1 |= (0x1<<9);//設置中斷使能GICD->ISENABLER[3] |= (0x1<<3);//設置中斷優先級GICD->IPRIORITYR[24] &= (~(0x1F<<27));//設置中斷處理cpuGICD->ITARGETSR[24] |= (0x1<<24);//使能中斷,中斷默認在組0GICD->CTRL |=(0x1);//設置使能GICC->CTRL |= (0x1);//設置優先級掩碼GICC->PMR |= (0x1f<<3);}//按鍵2初始化
void key2_init(){//配置PF7為輸入模式GPIOF->MODER &= (~(0x3<<14));//配置中斷選擇器EXTI7為PFEXTI->EXTICR2 &= (~(0xFF<<24));EXTI->EXTICR2 |= (0x05<<24);//配置為下降沿觸發EXTI->FTSR1 |= (0x1<<7);//使能中斷,關閉中斷屏蔽EXTI->C1IMR1 |= (0x1<<7);//設置中斷使能GICD->ISENABLER[3] |= (0x1<<1);//設置中斷優先級GICD->IPRIORITYR[24] &= (~(0x1F<<11));//設置中斷處理cpuGICD->ITARGETSR[24] |= (0x1<<8);//使能中斷,中斷默認在組0GICD->CTRL |=(0x1);//設置使能GICC->CTRL |= (0x1);//設置優先級掩碼GICC->PMR |= (0x1f<<3);
}//按鍵3初始化
void key3_init(){//配置PF8為輸入模式GPIOF->MODER &= (~(0x3<<16));//配置中斷選擇器EXTI8為PFEXTI->EXTICR3 &= (~0xFF);EXTI->EXTICR3 |= 0x05;//配置為下降沿觸發EXTI->FTSR1 |= (0x1<<8);//使能中斷,關閉中斷屏蔽EXTI->C1IMR1 |= (0x1<<8);//設置中斷使能GICD->ISENABLER[3] |= (0x1<<2);//設置中斷優先級GICD->IPRIORITYR[24] &= (~(0x1F<<19));//設置中斷處理cpuGICD->ITARGETSR[24] |= (0x1<<16);//使能中斷,中斷默認在組0GICD->CTRL |=(0x1);//設置使能GICC->CTRL |= (0x1);//設置優先級掩碼GICC->PMR |= (0x1f<<3);
}

led.h

#ifndef __LED_H__
#define __LED_H__/*//gpio寄存器
typedef struct{volatile unsigned int MODER;volatile unsigned int OTYPER;volatile unsigned int OSPEEDR;volatile unsigned int PUPDR;volatile unsigned int IDR;volatile unsigned int ODR;volatile unsigned int BSRR;
}gpio_t;*///GPIOE和GPIOF寄存器宏定義
//#define GPIOE (*(gpio_t *)0x50006000)
//#define GPIOF (*(gpio_t *)0x50007000)//led燈1初始化
void led1_init();
//led燈2初始化
void led2_init();
//led燈3初始化
void led3_init();//led燈1控制
void led1_ctl(int flag);
//led燈2控制
void led2_ctl(int flag);
//led燈3控制
void led3_ctl(int flag);#endif

main.c

#include "gpio.h"
#include "led.h"
#include "uart4.h"
#include "key_it.h"void delay(){for(int i=0;i<500;i++){for(int j=0;j<2000;j++){}}
}
extern void printf(const char *fmt, ...);
int main()
{//使能PE、PF時鐘*((unsigned int *)0x50000A28) |= (0x3<<4);	led1_init();led2_init();led3_init();key1_init();key2_init();key3_init();while (1){printf("do_main\n");delay(1000);}return 0;
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/18658.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/18658.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/18658.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Playwright 元素定位

一、get_by_XXXXX 1. get_by_role&#xff1a;根據元素角色進行定位, 常用的參數有兩個&#xff0c;第一個是角色名稱 role&#xff0c;第二個是元素的文本 name。其他參數的解釋大家可以參考源碼注釋。 # 獲取頁面名稱為確定的按鈕 page.get_bt_role(button, name確定) pl…

cfa三級大神復習經驗分享系列(一)

教材還是Notes? 對于愚鈍如我之流&#xff0c;建議大家三級一定要看教材。Note很精華很濃縮&#xff0c;我覺得看過教材再看note感覺總結的很精辟&#xff0c;但是Note是以考點列的&#xff0c;而教材像小說一樣娓娓道來&#xff0c;有邏輯有情節&#xff0c;如果不follow很難…

Android MIPI屏配置

參考資料&#xff1a;RockChip發布的DRM Display Driver Development Guide手冊&#xff0c;以及網上大量相關博客資料 首先要拿到《屏幕硬件規格書》和《DataSheet》&#xff0c;軟件配置主要依靠DataSheet提供數據支持。 查閱DataSheet里面on sequence和off sequence說明&a…

機器學習之爬山算法(Hill Climbing Algorithm)

爬山算法(Hill Climbing Algorithm)是一種簡單而常見的啟發式搜索算法,通常用于解決優化問題。它的基本思想類似于登山過程中爬升到山頂的過程,即從一個起始點開始,不斷嘗試向鄰近的點移動,直到找到一個局部最優解。 下面是爬山算法的基本工作流程: 初始化:選擇一個初…

關于同一個地址用作兩個不同頁面時,列表操作欄按鈕混淆狀態

同一個地址用作兩個不同頁面時&#xff0c;列表頁的操作欄中有好多個按鈕&#xff0c;如果用了v-if&#xff0c;可能會導致按鈕混淆狀態如disabled等屬性混亂 解決方法1&#xff1a; 將v-if換成v-show&#xff0c;用了v-show之后意味著所有按鈕都在只是在頁面上隱藏了 解決方…

【python深度學習】——torch.min()

【python深度學習】——torch.min 1. torch.min()1.1 計算整個張量的最小值1.2 沿特定維度計算最小值1.3 比較兩個張量 1. torch.min() torch.min()接受的參數如下: input: 輸入的張量。dim: 沿指定維度尋找最小值。如果指定了該參數&#xff0c;返回一個元組&#xff0c;其中…

基于Vue+SpirngBoot的博客管理平臺的設計與實現(論文+源碼)_kaic

摘 要 隨著當下社會的發展&#xff0c;互聯網已經成為時代的主流&#xff0c;從此進入了互聯網時代&#xff0c;對大部分人來說&#xff0c;互聯網在日常生活中的應用是越來越頻繁&#xff0c;大家都在互聯網當中互相交流、學習、娛樂。博客正是扮演這樣一個角色。博客已成為當…

[Nodejs]使用adm-zip和fs-extra壓縮打包后的文件

在此之前&#xff0c;操作目錄、壓縮文件是通過scripts來實現的&#xff0c;在windows機器上多有不便&#xff0c;需要通過linux命令行來實現cp、rm命令&#xff1a; "cpdist": "cp -r ./dist/* ../../qw-portal/assetAllocation/", "rmdist": …

實驗八 單區域OSPF路由協議配置

一、實驗目的 掌握 OSPF 動態路由協議的配置、診斷方法。 二、實驗步驟 1、 運行Cisco Packet Tracer軟件&#xff0c;在邏輯工作區放入三臺路由器、兩臺工作站PC及一臺筆記本&#xff0c;分別點擊各路由器&#xff0c;打開其配置窗口&#xff0c;關閉電源&#xff0c;分別加…

如何選擇云服務器

云服務器選擇概述 在選擇合適的云服務器時&#xff0c;需要綜合考慮多個方面的因素&#xff0c;包括但不限于云服務器的類型、配置、價格、性能、安全性、可靠性、擴展性以及服務商的品牌信譽等。以下是根據搜索結果得出的詳細分析和建議。 云服務器選擇詳解 云服務器類型選…

Python裝飾器的應用

Python 中的裝飾器是一種語法糖&#xff0c;可以在運行時&#xff0c;動態的給函數或類添加功能。裝飾器本質上是一個函數&#xff0c;使用 函數名就是可實現綁定給函數的第二個功能 。它的作用就是在不修改被裝飾對象源代碼和調用方式的前提下為被裝飾對象添加額外的功能。 …

策略模式代碼

import java.util.*; enum TYPE { NORMAL,CASH_DISCOUNT,CASH_RETURN}; interface Cashsuper { public double acceptCash(double money); } class CashNormal implements CashSuper{// 正常收費子類 public double accptCash(double money){ return money; …

微信小程序如何在公共組件中改變某一個頁面的屬性值

需求 公共組件A改變頁面B的屬性isShow的值。 思路 首先目前我不了解可以直接在組件中改變頁面的值的方法&#xff0c;所以我通過監聽的方式在B頁面監聽app.js的某一屬性值的改變從而改變B頁面的值&#xff0c;眾所周知app.js的某一屬性值是很容易就能更改的。 app.js globa…

Ownips+Coze海外社媒數據分析實戰指南

目錄 一、引言二、ISP代理簡介三、應用實踐——基于Ownips和coze的社媒智能分析助手3.1、Twitter趨勢數據采集3.1.1、Twitter趨勢數據接口分析3.1.2、Ownips原生住宅ISP選取與配置3.1.3、數據采集 3.2、基于Ownips和Coze的社媒智能助手3.2.1、Ownips數據采集插件集成3.2.2、創建…

解鎖未標記圖像的力量:深入探索計算機視覺中無監督卷積神經網絡

引言 近年來&#xff0c;計算機視覺領域取得了顯著進步&#xff0c;這在很大程度上得益于深度學習&#xff0c;尤其是卷積神經網絡&#xff08;CNN&#xff09;的發展。這些強大的模型在圖像分類、目標檢測和分割等任務上表現出色&#xff0c;主要依靠大規模標記數據集進行監督…

Flutter 中的 FadeTransition 小部件:全面指南

Flutter 中的 FadeTransition 小部件&#xff1a;全面指南 在 Flutter 中&#xff0c;動畫是一種吸引用戶注意力并提供流暢用戶體驗的強大工具。FadeTransition 是 Flutter 提供的一個動畫小部件&#xff0c;它允許子組件在不透明度上進行漸變&#xff0c;從而實現淡入和淡出效…

git基礎 -- 判斷 Git 輸入名稱是分支名還是標簽名

判斷 Git 輸入名稱是分支名還是標簽名 背景 在使用 Git 進行版本控制時&#xff0c;有時需要判斷一個給定的名稱是分支名還是標簽名。分支和標簽在 Git 中是兩種不同的引用類型&#xff0c;但它們的名稱空間是獨立的&#xff0c;因此同一個名稱可以同時存在于分支和標簽中。為…

Linux備份腳本

作用 Linux文件備份的作用較多&#xff0c;推薦以下幾種&#xff1a; 保護文件&#xff1a;備份可以幫助用戶保護文件&#xff0c;防止文件被意外刪除或損壞。保證系統安全和應用安全&#xff1a;Linux系統管理人員對系統和業務應用要有一個合理的備份恢復策略&#xff0c;完…

【Unity入門】認識Unity編輯器

Unity 是一個廣泛應用于游戲開發的強大引擎&#xff0c;從 1.0 版本開始到現在&#xff0c;其編輯器的基本框架一直保持穩定。其基于組件架構的設計&#xff0c;使得界面使用起來直觀且高效。為了更好地理解 Unity 的界面&#xff0c;我們可以將其比喻為搭建一個舞臺。以下是對…

【AI+chat】推薦一款基于大模型的智能對話機器人,支持微信公眾號、企業微信應用、飛書、釘釘接入

之前寫了一篇文章&#xff0c; coze配置 kimichat集成到微信公眾號聊天 【AIchat】手把手配置kimichat集成到微信公眾號中對話聊天 。 有同學私信我有沒有開源項目&#xff0c; 這里推薦一款chatgpt-on-wechat。 官方git地址&#xff1a;https://github.com/zhayujie/ch…