嵌入式控制K60考试复习
嵌入式控制K60考試復習
專業(yè)術語英文縮寫
RISC Reduced Instruction Set Computer精簡指令集計算機
IIC Inter-Integrated Circuit Bus 內(nèi)部集成電路總線
IDE Integrated Development Environment 集成開發(fā)環(huán)境
SIM System Integration Module 系統(tǒng)集成模塊
CRG Clock and Reset Generator 時鐘與復位發(fā)生器
SPI Serial Peripheral Interface同步串行外設接口
VCO Voltage Controlled Oscillator 壓控振蕩器
DMA Direct Memory Access,直接內(nèi)存存取
MPU Memory Protection Unit 存儲器保護單元
ARM Advanced RISC Machine進階精簡指令集機器
PIT Periodic Interrupt Timer 周期中斷定時器
SPSR Saved Program Status Register 備份的程序狀態(tài)寄存器(用于在程序異常中斷時保存被中斷的程序狀態(tài))
JTAG Joint Test Action Group 聯(lián)合測試行動組織 邊界掃描測試協(xié)議
CAN Controller Area Network 控制器局域網(wǎng)絡
PLL Phase-Locked Loop鎖相環(huán)
FLL Frequency-Locked Loop 頻率鎖定環(huán)
DCO Digitally-Controlled Oscillator數(shù)字控制振蕩器
PWM Pulse-Width Modulation 脈寬調(diào)制
FTM Flex Timer Module 柔性定時器模塊
NVIC Nested Vectored Interrupt Controller嵌套矢量中斷控制器
UART Universal Asynchronous Receiver And Transmitter 通用異步發(fā)送和接收器
RTOS Real Time Operation System 實時操作系統(tǒng)
ISR Interrupt Service Routines中斷服務程序
FPU Floating Point Unit 浮點運算單元
TCD Transfer Control Descriptor 轉(zhuǎn)移控制描述符
TSI Touch Sense Input 觸摸感應輸入
GPIO General Purpose Input/Output 通用輸入輸出
CRC Cyclic Redundancy Check 循環(huán)冗余檢查
RTC Real Time Clock 實時鐘
NVIC Nested Vectored Interrupt Controller嵌套矢量中斷控制器
UART Universal Asynchronous Receiver And Transmitter 通用異步發(fā)送和接收器
RTOS Real Time Operation System 實時操作系統(tǒng)
ISR Interrupt Service Routines中斷服務程序
FPU Floating Point Unit 浮點運算單元
TCD Transfer Control Descriptor 轉(zhuǎn)移控制描述符
TSI Touch Sense Input 觸摸感應輸入
GPIO General Purpose Input/Output 通用輸入輸出
CRC Cyclic Redundancy Check 循環(huán)冗余檢查
RTC Real Time Clock 實時鐘
?
大端和小端:
大端模式:高位字節(jié)存放內(nèi)存的低地址端,低位字節(jié)放在內(nèi)存的高地址端
小端模式:高位字節(jié)放在內(nèi)存的高地址端,低位字節(jié)放在內(nèi)存的低地址端
32bit寬的數(shù)0x12345678在Little-endian模式以及Big-endian模式)CPU內(nèi)存中的存放方式(假設從地址0x4000開始存放)為:
| 內(nèi)存地址 | 小端模式存放內(nèi)容 | 大端模式存放內(nèi)容 |
| 0x4000 | 0x78 | 0x12 |
| 0x4001 | 0x56 | 0x34 |
| 0x4002 | 0x34 | 0x56 |
| 0x4003 | 0x12 | 0x78 |
大端模式看上去很舒服,就是從上到下很順利地存儲進去,小端模式看上去有點兒奇怪.
?
ARM Corex-M4 的主要寄存器
32位寄存器:
13個通用寄存器,R0-R12
堆棧指針SP, R13寄存器的別名,也被稱為棧指針寄存器,用于在SP_process 和 SP_main之間的切換.
連接寄存器LR,R14,
程序計數(shù)器PC,R15
特殊功能寄存器(xPSR)
高位寄存器R8-R12可由指定通用寄存器的所有32位指令訪問,不能被16位指令訪問.
R13,R14,R15有如下功能:
堆棧指針R13:寄存器R13用作堆棧指針(SP)。由于SP忽略對位[1:0]的寫入,因此它會自動對齊到一個字,即為四字節(jié)邊界。在處理器為Handler模式下,使用的是SP_main(主棧),在Thread模式下,既可以使用SP_Process也可以使用SP_main
鏈接寄存器R14:寄存器R14是子程序寄存器(LR),當執(zhí)行帶鏈接的跳轉(zhuǎn)指令BL或者帶鏈接以及狀態(tài)切換的跳轉(zhuǎn)指令BLX時候,LR將保存PC作為返回地址.LR也用于異常返回,在其他的時候,可以把R14當做通用寄存器使用.
程序計數(shù)器為寄存器R15
ARM Cortex-M4 MCU數(shù)據(jù)處理指令是對通用寄存器R0~R7進行操作,在大多數(shù)情況下,操作的結果放入其中一個操作數(shù)寄存器中,而不是放入第3個寄存器中;訪問寄存器R8~R15受到一定的限制,除MOV、ADD指令訪問R8~R15外,其他數(shù)據(jù)處理指令總是更新CPSR中ALU狀態(tài)標志,訪問寄存器R8~R15的Thumb數(shù)據(jù)處理指令不能更新CPSR中的ALU狀態(tài)指示。
R13作為基址標志操作。R14被稱為“鏈接寄存器”(Link Register,LR)
ARM 處理器中使用R15 作為PC,它總是指向取指單元,并且ARM 處理器中只有一個PC 寄存器,被各模式共用。R15 有32 位寬度(下述標記為R15[31:0],表示R15 的‘第31位’到‘第0位'),ARM 處理器可以直接尋址4GB的地址空間(2^32 = 4G )。
?
MK60DN512是以ARMv7 Cortex-M4內(nèi)核的微控制器芯片
MK60DN512的通信模塊:
---具有MII和RMII接口的以太網(wǎng)控制器,用于外部PHY和硬件IEEE 1588功能
---片上收發(fā)的USB全速/低速控制器
---兩路CAN(控制器局域網(wǎng)絡)模塊
---三個SPI
---兩個I2C
---六個串口(UART)
---SDHC(安全數(shù)字主機控制器)
---I2S
?
MK60DN512的定時器:
---可編程延遲模塊
---8路電機控制/pwm定時器/普通定時器
---兩路正交解碼器/普通定時器
---IEEE 1588定時器
---周期性中斷定時器
---16位低功耗定時器
---載波調(diào)制發(fā)射器
---實時時鐘
?
連續(xù)轉(zhuǎn)換使能外設時鐘= 50 MHz,ADC時鐘= 12 MHz,ADLSMP = 1,ADLST = 01,ADHSC = 1
它具有250 Ksps轉(zhuǎn)換速度(250Ksps即為250KHz的采樣率)
現(xiàn)代88鍵的基頻赫茲列表十六音平等的關鍵標準或108鍵擴展鋼琴,第49個鍵,第五個A(稱為A4),調(diào)到440赫茲(簡稱A440)。每個連續(xù)的音高是通過將前一個乘以(遞增)或除以(遞減)2的十二次方(大約= 1.059463)得到的。例如,要使頻率從A4(A?4)上升到半音,將440乘以2的12次方。從A4到B4(整個音調(diào),或兩個半音),將兩倍乘以2的十二根次方(或者僅僅是2的六次方,大約= 1.122462)。
非可屏蔽中斷(Non Maskable interrupt), 是除復位之外的最高優(yōu)先級異常。它是永久啟用的,具有-2的固定優(yōu)先級。
多用途時鐘發(fā)生器(MCG)模塊,包含由內(nèi)部或外部時鐘發(fā)生源控制的鎖頻環(huán)(FLL)和鎖相環(huán)(PLL)。
?
?
MK60DN512 UART具有多個狀態(tài)中斷請求源(發(fā)送數(shù)據(jù)為空,發(fā)送完成,空閑,接收數(shù)據(jù)滿,LIN中斷檢測,RxD引腳有效邊沿,初始字符檢測)。UART狀態(tài)源的共享一個單中斷向量。
向量數(shù)(vector number)-當中斷被觸發(fā)時存儲在堆棧上的值。非核心中斷源計數(shù),即向量數(shù)減去16.
?
MK60DN512ZV MCU只有Port A(0-19,24-29), Port B(1-11,16-23), Port C(0-15,16-19), Port D(0-15)和Port E(0-12,24-28) 5個通用對外端口提供給用戶可用,每個端口有不同數(shù)量的引腳,經(jīng)過編程選擇,端口A-E均可以由外部脈沖信號檢測(脈沖邊沿及電平)引起中斷.
MK60DN512 MCU的ADC0(ADC1)轉(zhuǎn)換結果,不管是什么格式(單端8,10,12,16bit;差分9,11,13,16bit),要么放在ADC0_RA(ADC1_RA),要么放在ADC0_RB(ADC1_RB)中,一次轉(zhuǎn)換結束(包括多次后平均)只能存放一個結果。
?
MK60DN512(144引腳)的MCU包含4個PIT(周期中斷定時器模塊)模塊(PIT0-PIT3),所有的定時器都支持中斷的方式.中斷數(shù)分別對應84-87,定時器中斷可以通過使能TCTRLn中的[TIE]位來實現(xiàn).當相關定時器發(fā)生超時時,定時器中斷標志(TIF)設置為1,并通過向相應的TFLGn [TIF]寫1來清除為0。
???????? 1.Addition
ADD Rd, Rn, <op2> 1 Cycles
2.Long signed accumulate Multiply
SMLAL RdLo, RdHi, Rn, Rm 1 Cycles
3.Signed Divide
SDIV Rd, Rn, Rm 2 to 12 Cycles
?
除法運算的使用是提前終止的,以根據(jù)輸入操作數(shù)中前導1和0的數(shù)量最小化所需的周期數(shù).
?
?
處理器實現(xiàn)高級異常和中斷。
為了減少中斷延遲,處理器實現(xiàn)了中斷延遲到達和中斷尾鏈機制:
?當被訪問的內(nèi)存沒有應用等待狀態(tài)時 ,從激發(fā)中斷到執(zhí)行ISR的第一條指令,最多有12個周期延遲。要執(zhí)行的第一條指令與堆棧進棧并行獲取。
?類似地,中斷返回需要12個周期,其中返回的指令與堆棧出棧并行獲取。
?使用零等待狀態(tài)存儲器時,尾鏈需要6個周期。不執(zhí)行堆棧進棧或出棧,僅獲取下一個ISR的指令。
?
除了體系結構定義的異常行為外,處理器的異常模式還對以下的應用定義為異常:
?在NMI優(yōu)先級下從HardFault堆疊到NMI鎖定的異常
?在HardFault優(yōu)先級從NMI拆分到HardFault鎖定的例外。
?
為了最大限度地減少中斷延遲,處理器放棄任何分片指令來接收任何掛起的中斷。從中斷處理程序返回時,處理器從頭開始重新執(zhí)行分片指令,處理器執(zhí)行中斷可繼續(xù)指令字段。加載多個(LDM)操作和存儲多個(STM)操作是可中斷的, EPSR(程序狀態(tài)寄存器中的一種xPSR)保存從中斷發(fā)生點繼續(xù)加載或存儲多個所需的信息。
這意味著軟件不得使用加載多個或存儲多個指令來訪問設備或訪問讀取敏感的內(nèi)存區(qū)域或?qū)χ貜蛯懭朊舾械膮^(qū)域。在任何重復讀取或?qū)懭肟赡軐е陆Y果不一致或不良副作用的情況下,軟件不得使用這些說明。
| #include "common.h" #include "MK60_adc.h” ADC_MemMapPtr ADCN[2] = {ADC0_BASE_PTR, ADC1_BASE_PTR}; //定義兩個指針數(shù)組保存 ADCN 的址 static void adc_start (ADCn_Ch_e, ADC_nbit); //開始adc轉(zhuǎn)換 /* brief ADC初始化; param ADCn_Ch_e ADC通道; Sample usage: adc_init (ADC0_SE10 ); //初始化 ADC0_SE10 ,使用 PTA7 管腳 */ void adc_init(ADCn_Ch_e adcn_ch) { uint8 adcn = adcn_ch >> 5 ; //uint8 ch = adcn_ch & 0x1F; switch(adcn) { case ADC0: /* ADC0 */ SIM_SCGC6 |= (SIM_SCGC6_ADC0_MASK ); //開啟ADC0時鐘 SIM_SOPT7 &= ~(SIM_SOPT7_ADC0ALTTRGEN_MASK | SIM_SOPT7_ADC0PRETRGSEL_MASK); SIM_SOPT7 |= SIM_SOPT7_ADC0TRGSEL(0); break; case ADC1: /* ADC1 */ SIM_SCGC3 |= (SIM_SCGC3_ADC1_MASK ); SIM_SOPT7 &= ~(SIM_SOPT7_ADC1ALTTRGEN_MASK | SIM_SOPT7_ADC1PRETRGSEL_MASK) ; SIM_SOPT7 |= SIM_SOPT7_ADC1TRGSEL(0); break; default: ASSERT(0); } switch(adcn_ch) { case ADC0_SE8: // PTB0 port_init(PTB0, ALT0); break; case ADC0_SE18: // PTE25 port_init(PTE25, ALT0); break; case ADC0_DP0: case ADC0_DP1: case ADC0_DP3: case ADC0_DM0: // ADC0_DM0 case ADC0_DM1: // ADC0_DM1 case ADC0_SE16: // ADC0_SE16 case Temp0_Sensor: // Temperature Sensor,內(nèi)部溫度測量,可用ADC函數(shù) case VREFH0: // 參考高電壓,可用ADC函數(shù) ,結果恒為 2^n-1 case VREFL0: // 參考低電壓,可用ADC函數(shù) ,結果恒為 0 break; //這部分管腳不用配置復用 ? default: ASSERT(0); //斷言,傳遞的管腳不支持 ADC 單端軟件觸發(fā),請換 其他管腳 break; } } ? /* brief 獲取ADC采樣值(不支持B通道) param ADCn_Ch_e ADC通道 param ADC_nbit ADC精度(ADC_8bit,ADC_12bit, ADC_10bit, ADC_16bit ) return 采樣值 Sample usage: uint16 var = adc_once(ADC0_SE10, ADC_8bit); */ uint16 adc_once(ADCn_Ch_e adcn_ch, ADC_nbit bit) //采集某路模擬量的AD值 { ADCn_e adcn = (ADCn_e)(adcn_ch >> 5) ; uint16 result = 0; adc_start(adcn_ch, bit); //啟動ADC轉(zhuǎn)換 while (( ADC_SC1_REG(ADCN[adcn], 0 ) & ADC_SC1_COCO_MASK ) != ADC_SC1_COCO_MASK); //只支持 A通道 result = ADC_R_REG(ADCN[adcn], 0); ADC_SC1_REG(ADCN[adcn], 0) &= ~ADC_SC1_COCO_MASK; return result; } ? void adc_start(ADCn_Ch_e adcn_ch, ADC_nbit bit) /* Sample usage: adc_start(ADC0_SE10, ADC_8bit); */ { ADCn_e adcn = (ADCn_e)(adcn_ch >> 5) ; uint8 ch = (uint8)(adcn_ch & 0x1F); //初始化ADC默認配置 ADC_CFG1_REG(ADCN[adcn]) = (0 //| ADC_CFG1_ADLPC_MASK //ADC功耗配置,0為正常功耗,1為低功耗 | ADC_CFG1_ADIV(2) //時鐘分頻選擇,分頻系數(shù)為 2^n,2bit | ADC_CFG1_ADLSMP_MASK //采樣時間配置,0為短采樣時間,1 為長采樣時間 | ADC_CFG1_MODE(bit) | ADC_CFG1_ADICLK(0) //0為總線時鐘,1為總線時鐘/2,2為交替時鐘(ALTCLK),3為步時鐘(ADACK) ); ADC_CFG2_REG(ADCN[adcn]) = (0 //| ADC_CFG2_MUXSEL_MASK //ADC復用選擇,0為a通道,1為b通道. //| ADC_CFG2_ADACKEN_MASK //異步時鐘輸出使能,0為禁止,1為使能. | ADC_CFG2_ADHSC_MASK //高速配置,0為正常轉(zhuǎn)換序列.1為高速轉(zhuǎn)換序列 | ADC_CFG2_ADLSTS(0) //長采樣時間選擇.ADCK為4+n個額外循環(huán).額外循環(huán).0為20.1為12.2為6.3為2 ); //寫入 SC1A 啟動轉(zhuǎn)換 ADC_SC1_REG(ADCN[adcn], 0 ) = (0 | ADC_SC1_AIEN_MASK // 轉(zhuǎn)換完成中斷,0為禁止,1為使能 //| ADC_SC1_DIFF_MASK // 差分模式使能,0為單端,1為差分 | ADC_SC1_ADCH( ch ) ); } ? ? ? ? |
?
?
?
?
?
?
?
?
?
?
?
?
總結
以上是生活随笔為你收集整理的嵌入式控制K60考试复习的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: react(84)--多张图片
- 下一篇: Taro+react开发(29)引入固定