最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

(基于ARM的)微機原理與接口技術(shù)筆記合集(7-14)

2021-12-11 21:19 作者:會整活的劍人  | 我要投稿

我是北航儀光低檔垃圾暴斃貨劍人,曾經(jīng)是航C豬腳.咕了兩個月,馬上要烤期了,各位的破防水準備好了嗎?現(xiàn)在是12月11號,再過3周就要考試了,之前一直想更新但是一直拖,但是再拖下去就暴斃了.現(xiàn)在我決定不繼續(xù)拖了,于是有了這個合集,2個月來的R710F的上路歷程.

首先是匯編語言雜記

(真的是筆記)如果配合ARM手冊食用效果更佳.考試如果考一車匯編我必然掛科,不是開玩笑.

注意R710F是不帶FPU的 所有的float和double都是軟件處理.

R710F好像也沒有硬件除法器......

下面兩段是打開中斷的
配置堆棧
adr偽指令

匯編和C相互調(diào)用

ATPCS規(guī)定了:小于4個參數(shù):寄存器r0r3傳參數(shù)

匯編調(diào)用C或者匯編(外部的程序段)在匯編里面打import

import CFunc

C調(diào)用匯編:使用export把程序段導出給C語言調(diào)用

比如說下面的匯編程序段要實現(xiàn)復制字符串的功能:

匯編版strcpy 代碼看下面的文章

在C里面寫個函數(shù):

就可以調(diào)用上面的匯編程序了

嵌入式高級語言編程簡介

str71x.s這樣的匯編文件是啟動代碼()

不光r710f有啟動代碼 其他的板子,比如說樹莓派pico(2個cortex-m0+核)或者stm32f103c8t6(1個cortex-m3核)都需要對應的啟動文件,這個匯編文件和編譯器相關.也有的編譯器支持用C語言寫啟動文件.

啟動代碼需要做的:

  • 建立棧區(qū),堆區(qū),向量表,硬件地址等,初始化C運行時

  • 運行main函數(shù)

  • 提供ISO C標準函數(shù)支持(比如說strcpy這樣的)

  • 捕獲異常


R710F芯片及其存儲系統(tǒng)

r710f芯片大概結(jié)構(gòu)(這個開發(fā)板的生產(chǎn)廠家現(xiàn)在好像已經(jīng)寄了)

native總線:

FLASH,SRAM,調(diào)試口JTAG,PRCCU,EMI

apb2總線(慢速):

模數(shù)轉(zhuǎn)換ADC,增強型中斷控制器EIC,定時器TIM,實時時鐘RTC,外部中斷XTI,看門狗WDG,3組GPIO

apb1總線:(快速)

2組IIC,2組帶緩沖區(qū)的SPI,4組UART,1個USB,1個CAN,1個HDLC


R710F的內(nèi)部 沒有NVIC

存儲空間(對于別的板子,例如stm32,存儲空間地址配置有差異.可以查手冊獲得這些信息)

r710f的地址范圍:0x000000000xffffffff

0x00000000BOOT區(qū)

0x20000000SRAM

  • r710fz2 64KB SRAM

0x40000000FLASH

  • 256KB Bank0

  • 16KB Bank1

  • EMI 最大可以擴展4個16MB的FLASH(16位的)需要配置寄存器

0xa0000000PRCCU(復位和時鐘控制器)

0xc0000000APB1外設

0xe0000000APB2外設

0xfffffb00EIC

R710F的啟動模式

R710F供電模式和時鐘

PRCCU

power,reset,clock control unit(供電,復位,時鐘控制器)

對于CPU兩個重要的事情:第一個是復位的狀態(tài)一定要確定 第二個是時鐘

RESET是復位到最初始的狀態(tài),是后面所有事情的基礎.

上電復位,軟件指令復位,看門狗復位

上電復位:RAM的東西不確定的

軟件復位/看門狗復位:RAM的東西不丟失

CPU必會死機(躲不掉的).看門狗:一種硬件定時器,當核心死機了或者跑飛了復位.

上電和掉電的順序很重要!

需要電源管理模塊.可以做功耗管理,低功耗模式.

R710F集成2個穩(wěn)壓模塊.只用3.3V供電就OK了

上電復位(低有效)

r710f的電源樹

如果是電池供電,全速工作會非常費電.

低功耗模式

R710F的時鐘樹(重點)

時鐘源

CK是時鐘源(有源晶振)

選擇時鐘源用配置寄存器

32768無源晶振是低功耗時用的

USB有專用時鐘

R710F時鐘樹

上手一個板子,理解時鐘樹很重要.R710F主頻最大48MHz,引8MHz時鐘源,過PLL(鎖相環(huán))倍頻12分頻2得48MHz,然后1分頻給MCLK就是48MHz.如果是16MHz的時鐘源就需要修改PLL配置寄存器,時序亂了CPU就不能正常工作.外設如果需要24M的時鐘在PCLK處開2分頻.

下面這個圖是從CSDN搬的.STM32有4個時鐘源,時鐘樹也更加復雜,但是順著找順著配置就能做出來開單片機必然先配置時鐘,有的時候是人家SDK替你做了,自己做的時候需要看時鐘樹.

STM32F103時鐘樹

I/O接口技術(shù)簡介

IO口的作用:解決速度匹配問題,信號轉(zhuǎn)換,輸入輸出控制

CPU與IO之間信息:數(shù)據(jù),狀態(tài)信息,控制信息

IO口的編地址方式:統(tǒng)一編址(存儲器映像),獨立編址(有專門的指令訪問外設)

GPIO的硬件結(jié)構(gòu)

外設通過寄存器和處理器連接

寄存器組包括:配置寄存器(CFGR) 狀態(tài)寄存器(SR) 數(shù)據(jù)寄存器(DR)

CPU與IO之間信息:數(shù)據(jù),狀態(tài)信息,控制信息

ARM對IO口進行了統(tǒng)一編址,不用I/O指令(通過ARM庫的結(jié)構(gòu)指針訪問)

并行傳輸:一次傳輸多位(可以是一個數(shù))需要多根線 用并口

并口速度快了可能有速度的微小差異(導致傳輸出錯),干擾大

串行傳輸:一次傳輸一位(按順序走) 用串口

80x86的外設有專門的指令去訪問(不占存儲空間)

GPIO功能:讀引腳的高低電平/輸出高低電平 切忌直接用GPIO接在電機等大電流器件

配置IO口:一個GPIO有3個配置寄存器

R710F的8個IO口模式

8個模式:

輸入:高阻(模擬)輸入,TTL輸入 CMOS輸入 帶上拉和下拉的輸入(注意不是單獨配置上拉和下拉)TTL和CMOS是檢測1的電平不一樣.AIN是模擬輸入

輸出:推拉輸出/開漏輸出(OUT模式或者復用模式)

下面是STM32的IO口結(jié)構(gòu)(網(wǎng)上找的圖,不放我手繪的了),和R710F的類似.但是

更復雜,有更舒適的庫函數(shù)可以用,而且可以單獨配置上拉或下拉.

STM32的IO口

串行接口

UART: Universal Asynchronous Receiver Transmitter 通用異步收發(fā)器

串口 一次發(fā)一個bit 必須從bit0開始(LSBFIRST)

和并行對應 并行可以一次可以發(fā)一個字節(jié)

USB:Universal Serial Bus也是一種串行接口協(xié)議

高電平空閑,一般1個起始位,8個數(shù)據(jù)位(最常見的),[1個可選的校驗位],1個(或2個)停止位

起始位低電平,然后是原始數(shù)據(jù),校驗位,停止位.

速度問題 baudrate

baudrate高的時候傳輸快,但是時鐘偏差容易導致通信失敗.

工業(yè)控制不能輕易的用藍牙或WIFI因為不可靠,有可能丟幀

3.3V或5V的串口可以通過RS232模塊轉(zhuǎn)成大的電壓 -12V(低) +12V(高)可以傳輸100米

為保證抗干擾 baudrate需要調(diào)低

常用于遠程有線傳輸?shù)倪€有RS485/RS422模塊

UART示意圖

R710F的UART配置方式

配置 baudrate寄存器 baudrate=PCLK1/(16*BaudReg)

配置控制寄存器

緩沖寄存器(RX和TX)

CPU和外設之前的傳送數(shù)據(jù)方式

1.無條件傳送(點燈就是這樣的)

  • 外設簡單,要求速度快/兩次傳送

  • 需要buffer/latch

2.查詢(輪詢)方式

  • 先查詢再傳送

  • 至少2個端口(數(shù)據(jù)/狀態(tài))

3.中斷方式

  • 外設向CPU發(fā)中斷(IRQ)->CPU中斷當前工作進入IRQ函數(shù)->辦完了返回

  • 協(xié)調(diào)快速CPU和慢速外設

4.DMA方式

  • Direct Memory Access 直接從外設到存儲器 省得CPU去搬磚 也可以外設搬到外設比如說把AD的結(jié)果搬到SPI

  • 最先進的方式(硬件DMA) 用于大塊數(shù)據(jù)傳輸/快速數(shù)據(jù)

  • 需要CPU讓開一些總線給DMA用 代價是CPU訪問變慢

  • 可以配合中斷使用

  • 使用流程:配置,傳送,傳送完了怎么辦

中斷技術(shù)

定義:CPU暫時中止當前的程序切換到中斷處理程序(IRQHANDLER)

意義:CPU和IO并行工作,處理故障,提高實時性

中斷系統(tǒng):

早期的板子沒有自帶NVIC(nested vectored interrupt controller)

中斷源:

分類:

按產(chǎn)生方式:強迫中斷/非強迫中斷

按中斷位置:內(nèi)部/外部

按進入handler方式:向量中斷/非向量中斷

中斷優(yōu)先級/中斷嵌套:在中斷處理函數(shù)里面可以再來中斷,硬件處理(stm32或者樹莓派pico的硬件NVIC/ r710f的EIC)


寄存器配置:查找datasheet

EIC把ARM7TDMI的2個中斷(IRQ/FIQ)擴成32個中斷

工作流程:EIC接受中斷(ICR打開相應中斷),更新IVR拼一個向量表

編程:初始化,配置,打開中斷

設置IRQ中斷優(yōu)先級,打開中斷,EIC負責配置

直接打開FIQ.在硬件上FIQ可以保證比IRQ優(yōu)先處理


如何進入異常:

  • 入口放跳轉(zhuǎn)指令b exception_handler 注意跳轉(zhuǎn)范圍限制

  • 文字池 32位的地址

    ldr pc,=handler_addr

如何初始化 IVR和32個SIR

  • 用地址初始化:缺點:32個子程的地址高16位必須相同

  • 在EIC_IVR生成跳轉(zhuǎn)指令

中斷服務子程(ISR)是一種特殊的子程序



中斷的步驟:

第一步:別的硬件發(fā)送中斷請求


第三步:處理中斷

保護現(xiàn)場(硬件可以做),保護斷點(可能需要軟件做,否則寄存器的關鍵數(shù)據(jù)變了,程序跑飛了)

開中斷,處理,關中斷,恢復現(xiàn)場.

哪些事情是硬件做或者SDK軟件實現(xiàn)好了的,哪些是需要手寫的 看不同的CPU和SDK手冊

R710F的中斷向量表:

向量表決定了FIQ可以打斷IRQ

ARM7TDMI的異常(和中斷有關,但是它們是兩個概念)

  • 直接異常:軟中斷/undefined instruction/預取指異常

  • 間接異常:數(shù)據(jù)終止

  • 外部產(chǎn)生的: RESET/IRQ/FIQ

RESET是最高級的 強制重開.


出現(xiàn)異常的時候R710F核心自動做的:


為什么是PC-4因為涉及流水線,設置PC為跳轉(zhuǎn)到IRQ地址

R710F只有2個中斷(IRQ和FIQ)通過EIC和XTI(外部中斷控制器)實現(xiàn)中斷的擴展

新一些的ARM Cortex-M板子普遍用核心自帶的NVIC(nested vectored interrupt controller)處理中斷

R710F的中斷組織


定時器(TIMER)


計數(shù)器:對誰計數(shù) 怎么變 復位?

R710F的定時器16位

counter初始化為0xfffc

這點極不友好,重置就是0xfffc,不是任意的數(shù)



注:STM32是可以指定定時器重置后裝載的數(shù)的,也能控制向上/向下計數(shù),使用更加靈活,而且還有SYSTICK定時器可以用.

5個中斷(溢出中斷,2個比較中斷,2個捕獲中斷)

輸入->邊沿檢測電路ICAP變化,把計數(shù)器的值copy到ICAR/ICBR

可以測量引腳的脈沖寬度(PWM)太快的和太慢的都不能測.

輸出引腳可以用于定時/中斷,產(chǎn)生硬件PWM輸出

OCAR用于控制脈寬:計數(shù)器與OCAR一致 OCMPA置OLVLA

OCBR用于控制周期:計數(shù)器與OCBR一致 OCMPA置OLVLB同時復位

OCAR<OCBR:PWM

OCAR=OCBR:方波

OCAR>OCBR:無輸出

可用于測量PWM

兩個有用的公式

寄存器手冊(純寄存器開發(fā)要用,庫函數(shù)開發(fā)可以不那么care)

模數(shù)轉(zhuǎn)換(ADC)

FLASH型AD,最快,成本最高


r710F:板載12位ADC

輸入0-2.5V 4個通道->4個寄存器(STM32f103c8t6和樹莓派pico都是0-3.3V的AD模塊)

可以出中斷

配置時鐘(PRESCALER=APB2FREQ/(SAMPLEFREQ*512*4))



配置過程:

模式:round robin(連續(xù)出多個)/single channel operation

初始化:

  • 配置AD模塊ADC12_Init()

  • 配置GPIO模擬輸入GPIO_Config(GPIO1,1,GPIO_HI_AIN_TRI)

  • 配置prescaler(低7位有效)ADC12_PrescalerConfig

  • 配置轉(zhuǎn)換模式

  • 配置通道

  • 輪詢等待轉(zhuǎn)換結(jié)果

  • 取結(jié)果

  • 關閉轉(zhuǎn)換


(基于ARM的)微機原理與接口技術(shù)筆記合集(7-14)的評論 (共 條)

分享到微博請遵守國家法律
淳安县| 顺义区| 南丹县| 屏山县| 论坛| 峡江县| 烟台市| 鄢陵县| 乡宁县| 黄平县| 志丹县| 马公市| 翁牛特旗| 南川市| 蕲春县| 务川| 南召县| 班玛县| 宜都市| 泸州市| 安徽省| 和政县| 南城县| 仁布县| 砀山县| 镇原县| 墨江| 邵武市| 澄城县| 专栏| 蒲城县| 太仓市| 临沧市| 琼中| 乌海市| 玛沁县| 农安县| 蒲城县| 阿鲁科尔沁旗| 招远市| 安乡县|