日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

嵌入式控制K60考试复习

發(fā)布時(shí)間:2023/12/9 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 嵌入式控制K60考试复习 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

嵌入式控制K60考試復(fù)習(xí)

專(zhuān)業(yè)術(shù)語(yǔ)英文縮寫(xiě)

RISC Reduced Instruction Set Computer精簡(jiǎn)指令集計(jì)算機(jī)

IIC Inter-Integrated Circuit Bus 內(nèi)部集成電路總線

IDE Integrated Development Environment 集成開(kāi)發(fā)環(huán)境

SIM System Integration Module 系統(tǒng)集成模塊

CRG Clock and Reset Generator 時(shí)鐘與復(fù)位發(fā)生器

SPI Serial Peripheral Interface同步串行外設(shè)接口

VCO Voltage Controlled Oscillator 壓控振蕩器

DMA Direct Memory Access,直接內(nèi)存存取

MPU Memory Protection Unit 存儲(chǔ)器保護(hù)單元

ARM Advanced RISC Machine進(jìn)階精簡(jiǎn)指令集機(jī)器

PIT Periodic Interrupt Timer 周期中斷定時(shí)器

SPSR Saved Program Status Register 備份的程序狀態(tài)寄存器(用于在程序異常中斷時(shí)保存被中斷的程序狀態(tài))

JTAG Joint Test Action Group 聯(lián)合測(cè)試行動(dòng)組織 邊界掃描測(cè)試協(xié)議

CAN Controller Area Network 控制器局域網(wǎng)絡(luò)

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 柔性定時(shí)器模塊

NVIC Nested Vectored Interrupt Controller嵌套矢量中斷控制器

UART Universal Asynchronous Receiver And Transmitter 通用異步發(fā)送和接收器

RTOS Real Time Operation System 實(shí)時(shí)操作系統(tǒng)

ISR Interrupt Service Routines中斷服務(wù)程序

FPU Floating Point Unit 浮點(diǎn)運(yùn)算單元

TCD Transfer Control Descriptor 轉(zhuǎn)移控制描述符

TSI Touch Sense Input 觸摸感應(yīng)輸入

GPIO General Purpose Input/Output 通用輸入輸出

CRC Cyclic Redundancy Check 循環(huán)冗余檢查

RTC Real Time Clock 實(shí)時(shí)鐘

NVIC Nested Vectored Interrupt Controller嵌套矢量中斷控制器

UART Universal Asynchronous Receiver And Transmitter 通用異步發(fā)送和接收器

RTOS Real Time Operation System 實(shí)時(shí)操作系統(tǒng)

ISR Interrupt Service Routines中斷服務(wù)程序

FPU Floating Point Unit 浮點(diǎn)運(yùn)算單元

TCD Transfer Control Descriptor 轉(zhuǎn)移控制描述符

TSI Touch Sense Input 觸摸感應(yīng)輸入

GPIO General Purpose Input/Output 通用輸入輸出

CRC Cyclic Redundancy Check 循環(huán)冗余檢查

RTC Real Time Clock 實(shí)時(shí)鐘

?

大端和小端:

大端模式:高位字節(jié)存放內(nèi)存的低地址端,低位字節(jié)放在內(nèi)存的高地址端

小端模式:高位字節(jié)放在內(nèi)存的高地址端,低位字節(jié)放在內(nèi)存的低地址端

32bit寬的數(shù)0x12345678在Little-endian模式以及Big-endian模式)CPU內(nèi)存中的存放方式(假設(shè)從地址0x4000開(kāi)始存放)為:

內(nèi)存地址

小端模式存放內(nèi)容

大端模式存放內(nèi)容

0x4000

0x78

0x12

0x4001

0x56

0x34

0x4002

0x34

0x56

0x4003

0x12

0x78

大端模式看上去很舒服,就是從上到下很順利地存儲(chǔ)進(jìn)去,小端模式看上去有點(diǎn)兒奇怪.

?

ARM Corex-M4 的主要寄存器

32位寄存器:

13個(gè)通用寄存器,R0-R12

堆棧指針SP, R13寄存器的別名,也被稱(chēng)為棧指針寄存器,用于在SP_process 和 SP_main之間的切換.

連接寄存器LR,R14,

程序計(jì)數(shù)器PC,R15

特殊功能寄存器(xPSR)

高位寄存器R8-R12可由指定通用寄存器的所有32位指令訪問(wèn),不能被16位指令訪問(wèn).

R13,R14,R15有如下功能:

堆棧指針R13:寄存器R13用作堆棧指針(SP)。由于SP忽略對(duì)位[1:0]的寫(xiě)入,因此它會(huì)自動(dòng)對(duì)齊到一個(gè)字,即為四字節(jié)邊界。在處理器為Handler模式下,使用的是SP_main(主棧),在Thread模式下,既可以使用SP_Process也可以使用SP_main

鏈接寄存器R14:寄存器R14是子程序寄存器(LR),當(dāng)執(zhí)行帶鏈接的跳轉(zhuǎn)指令BL或者帶鏈接以及狀態(tài)切換的跳轉(zhuǎn)指令BLX時(shí)候,LR將保存PC作為返回地址.LR也用于異常返回,在其他的時(shí)候,可以把R14當(dāng)做通用寄存器使用.

程序計(jì)數(shù)器為寄存器R15

ARM Cortex-M4 MCU數(shù)據(jù)處理指令是對(duì)通用寄存器R0~R7進(jìn)行操作,在大多數(shù)情況下,操作的結(jié)果放入其中一個(gè)操作數(shù)寄存器中,而不是放入第3個(gè)寄存器中;訪問(wèn)寄存器R8~R15受到一定的限制,除MOV、ADD指令訪問(wèn)R8~R15外,其他數(shù)據(jù)處理指令總是更新CPSR中ALU狀態(tài)標(biāo)志,訪問(wèn)寄存器R8~R15的Thumb數(shù)據(jù)處理指令不能更新CPSR中的ALU狀態(tài)指示。

R13作為基址標(biāo)志操作。R14被稱(chēng)為“鏈接寄存器”(Link Register,LR)

ARM 處理器中使用R15 作為PC,它總是指向取指單元,并且ARM 處理器中只有一個(gè)PC 寄存器,被各模式共用。R15 有32 位寬度(下述標(biāo)記為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)絡(luò))模塊

---三個(gè)SPI

---兩個(gè)I2C

---六個(gè)串口(UART)

---SDHC(安全數(shù)字主機(jī)控制器)

---I2S

?

MK60DN512的定時(shí)器:

---可編程延遲模塊

---8路電機(jī)控制/pwm定時(shí)器/普通定時(shí)器

---兩路正交解碼器/普通定時(shí)器

---IEEE 1588定時(shí)器

---周期性中斷定時(shí)器

---16位低功耗定時(shí)器

---載波調(diào)制發(fā)射器

---實(shí)時(shí)時(shí)鐘

?

連續(xù)轉(zhuǎn)換使能外設(shè)時(shí)鐘= 50 MHz,ADC時(shí)鐘= 12 MHz,ADLSMP = 1,ADLST = 01,ADHSC = 1

它具有250 Ksps轉(zhuǎn)換速度(250Ksps即為250KHz的采樣率)

現(xiàn)代88鍵的基頻赫茲列表十六音平等的關(guān)鍵標(biāo)準(zhǔn)或108鍵擴(kuò)展鋼琴,第49個(gè)鍵,第五個(gè)A(稱(chēng)為A4),調(diào)到440赫茲(簡(jiǎn)稱(chēng)A440)。每個(gè)連續(xù)的音高是通過(guò)將前一個(gè)乘以(遞增)或除以(遞減)2的十二次方(大約= 1.059463)得到的。例如,要使頻率從A4(A?4)上升到半音,將440乘以2的12次方。從A4到B4(整個(gè)音調(diào),或兩個(gè)半音),將兩倍乘以2的十二根次方(或者僅僅是2的六次方,大約= 1.122462)。

非可屏蔽中斷(Non Maskable interrupt), 是除復(fù)位之外的最高優(yōu)先級(jí)異常。它是永久啟用的,具有-2的固定優(yōu)先級(jí)。

多用途時(shí)鐘發(fā)生器(MCG)模塊,包含由內(nèi)部或外部時(shí)鐘發(fā)生源控制的鎖頻環(huán)(FLL)和鎖相環(huán)(PLL)。

?

?

MK60DN512 UART具有多個(gè)狀態(tài)中斷請(qǐng)求源(發(fā)送數(shù)據(jù)為空,發(fā)送完成,空閑,接收數(shù)據(jù)滿(mǎn),LIN中斷檢測(cè),RxD引腳有效邊沿,初始字符檢測(cè))。UART狀態(tài)源的共享一個(gè)單中斷向量。

向量數(shù)(vector number)-當(dāng)中斷被觸發(fā)時(shí)存儲(chǔ)在堆棧上的值。非核心中斷源計(jì)數(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個(gè)通用對(duì)外端口提供給用戶(hù)可用,每個(gè)端口有不同數(shù)量的引腳,經(jīng)過(guò)編程選擇,端口A-E均可以由外部脈沖信號(hào)檢測(cè)(脈沖邊沿及電平)引起中斷.

MK60DN512 MCU的ADC0(ADC1)轉(zhuǎn)換結(jié)果,不管是什么格式(單端8,10,12,16bit;差分9,11,13,16bit),要么放在ADC0_RA(ADC1_RA),要么放在ADC0_RB(ADC1_RB)中,一次轉(zhuǎn)換結(jié)束(包括多次后平均)只能存放一個(gè)結(jié)果。

?

MK60DN512(144引腳)的MCU包含4個(gè)PIT(周期中斷定時(shí)器模塊)模塊(PIT0-PIT3),所有的定時(shí)器都支持中斷的方式.中斷數(shù)分別對(duì)應(yīng)84-87,定時(shí)器中斷可以通過(guò)使能TCTRLn中的[TIE]位來(lái)實(shí)現(xiàn).當(dāng)相關(guān)定時(shí)器發(fā)生超時(shí)時(shí),定時(shí)器中斷標(biāo)志(TIF)設(shè)置為1,并通過(guò)向相應(yīng)的TFLGn [TIF]寫(xiě)1來(lái)清除為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

?

除法運(yùn)算的使用是提前終止的,以根據(jù)輸入操作數(shù)中前導(dǎo)1和0的數(shù)量最小化所需的周期數(shù).

?

?

處理器實(shí)現(xiàn)高級(jí)異常和中斷。

為了減少中斷延遲,處理器實(shí)現(xiàn)了中斷延遲到達(dá)中斷尾鏈機(jī)制

?當(dāng)被訪問(wèn)的內(nèi)存沒(méi)有應(yīng)用等待狀態(tài)時(shí) ,從激發(fā)中斷到執(zhí)行ISR的第一條指令,最多有12個(gè)周期延遲。要執(zhí)行的第一條指令與堆棧進(jìn)棧并行獲取。

?類(lèi)似地,中斷返回需要12個(gè)周期,其中返回的指令與堆棧出棧并行獲取。

?使用零等待狀態(tài)存儲(chǔ)器時(shí),尾鏈需要6個(gè)周期。不執(zhí)行堆棧進(jìn)棧或出棧,僅獲取下一個(gè)ISR的指令。

?

除了體系結(jié)構(gòu)定義的異常行為外,處理器的異常模式還對(duì)以下的應(yīng)用定義為異常:

?在NMI優(yōu)先級(jí)下從HardFault堆疊到NMI鎖定的異常

?在HardFault優(yōu)先級(jí)從NMI拆分到HardFault鎖定的例外。

?

為了最大限度地減少中斷延遲,處理器放棄任何分片指令來(lái)接收任何掛起的中斷。從中斷處理程序返回時(shí),處理器從頭開(kāi)始重新執(zhí)行分片指令,處理器執(zhí)行中斷可繼續(xù)指令字段。加載多個(gè)(LDM)操作和存儲(chǔ)多個(gè)(STM)操作是可中斷的, EPSR(程序狀態(tài)寄存器中的一種xPSR)保存從中斷發(fā)生點(diǎn)繼續(xù)加載或存儲(chǔ)多個(gè)所需的信息。

這意味著軟件不得使用加載多個(gè)或存儲(chǔ)多個(gè)指令來(lái)訪問(wèn)設(shè)備或訪問(wèn)讀取敏感的內(nèi)存區(qū)域或?qū)χ貜?fù)寫(xiě)入敏感的區(qū)域。在任何重復(fù)讀取或?qū)懭肟赡軐?dǎo)致結(jié)果不一致或不良副作用的情況下,軟件不得使用這些說(shuō)明。

#include "common.h"

#include "MK60_adc.h”

ADC_MemMapPtr ADCN[2] = {ADC0_BASE_PTR, ADC1_BASE_PTR}; //定義兩個(gè)指針數(shù)組保存 ADCN 的址

static void adc_start (ADCn_Ch_e, ADC_nbit); //開(kāi)始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 ); //開(kāi)啟ADC0時(shí)鐘

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)部溫度測(cè)量,可用ADC函數(shù)

case VREFH0: // 參考高電壓,可用ADC函數(shù) ,結(jié)果恒為 2^n-1

case VREFL0: // 參考低電壓,可用ADC函數(shù) ,結(jié)果恒為 0

break; //這部分管腳不用配置復(fù)用

?

default:

ASSERT(0); //斷言,傳遞的管腳不支持 ADC 單端軟件觸發(fā),請(qǐng)換 其他管腳

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); //啟動(dòng)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默認(rèn)配置

ADC_CFG1_REG(ADCN[adcn]) = (0

//| ADC_CFG1_ADLPC_MASK //ADC功耗配置,0為正常功耗,1為低功耗

| ADC_CFG1_ADIV(2) //時(shí)鐘分頻選擇,分頻系數(shù)為 2^n,2bit

| ADC_CFG1_ADLSMP_MASK //采樣時(shí)間配置,0為短采樣時(shí)間,1 為長(zhǎng)采樣時(shí)間

| ADC_CFG1_MODE(bit)

| ADC_CFG1_ADICLK(0) //0為總線時(shí)鐘,1為總線時(shí)鐘/2,2為交替時(shí)鐘(ALTCLK),3為步時(shí)鐘(ADACK)

);

ADC_CFG2_REG(ADCN[adcn]) = (0

//| ADC_CFG2_MUXSEL_MASK //ADC復(fù)用選擇,0為a通道,1為b通道.

//| ADC_CFG2_ADACKEN_MASK //異步時(shí)鐘輸出使能,0為禁止,1為使能.

| ADC_CFG2_ADHSC_MASK //高速配置,0為正常轉(zhuǎn)換序列.1為高速轉(zhuǎn)換序列

| ADC_CFG2_ADLSTS(0) //長(zhǎng)采樣時(shí)間選擇.ADCK為4+n個(gè)額外循環(huán).額外循環(huán).0為20.1為12.2為6.3為2

);

//寫(xiě)入 SC1A 啟動(dòng)轉(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 )

);

}

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

總結(jié)

以上是生活随笔為你收集整理的嵌入式控制K60考试复习的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。