找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2456|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

山外K60—學(xué)習(xí)筆記

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:979806 發(fā)表于 2021-11-16 21:12 | 只看該作者 回帖獎(jiǎng)勵(lì) |正序?yàn)g覽 |閱讀模式
    寫這個(gè)的原因是,作業(yè)三需要理解學(xué)長們的程序(節(jié)能二隊(duì)程序),畫出思維導(dǎo)圖,而學(xué)長的程序是用KEA128作為開發(fā)板。

一、開發(fā)板 TRK-KEA128

如今車載的電器設(shè)備、娛樂功能越來越多,然而更多的功能也意味著更多的電子元件、更多的線路,這無疑讓車身布線成為一項(xiàng)十分艱難的工作,因此,CAN總線出現(xiàn)啦。

通俗的講,CAN總線好比在汽車的控制元件之間建立的網(wǎng)絡(luò),使它們實(shí)現(xiàn)資源上的共享(CAN總線通信方式:節(jié)點(diǎn)發(fā)送的信息可被網(wǎng)絡(luò)中所有其他節(jié)點(diǎn)看到),這樣,不僅大大減少了相同傳感器、導(dǎo)線的數(shù)量,同時(shí)也使可以配置的控制單元讀取更多信息,實(shí)現(xiàn)更加精確的控制。

顯然,TRK-KEA128就是基于CAN功能的控制芯片。

TRK-KEA128板載的資源:

    采用80 LQFP封裝的Kinetis KEA128 MCU
    采用PK20DX128 MCU的板載OpenSDA調(diào)試和編程電路
    一個(gè)CAN通信接口、一個(gè)LIN通信接口
    一個(gè)環(huán)境光傳感器、四個(gè)用戶LEDs
    一個(gè)MCU RESET按鍵、一個(gè)SDA RESET按鍵、兩個(gè)用戶按鍵
    12V DC Jack輸入、5V MicroUSB口輸入

TRK-KEA128板載的電路功能:

    主控MCU以及延生的電路功能(例如IO口引出的用戶擴(kuò)展接口、按鍵\LED電路、利用ADC功能拓展的光線傳感器電路)
    基于PK20DX128 MCU的板載OpenSDA調(diào)試電路
    通過外部PHY擴(kuò)展的CAN、LIN接口電路

下圖是KEAZ128的中文手冊目錄,來自網(wǎng)絡(luò)(侵權(quán)必刪):
二、微控制器  PKEAZ128AMLK

主控MCU是 PKEAZ128AMLK,基于48MHz主頻的32位ARM Cortex-M0+處理器,集成了128KB FLASH以及16KB RAM,主要集成了CAN控制器,適合面向汽車網(wǎng)絡(luò)的應(yīng)用設(shè)計(jì),并且采用了常見的LQFP80封裝。

PKEAZ128AMLK微控制器的特點(diǎn):

    高達(dá)48 MHz的ARM Cortex M0+內(nèi)核,集成128KB FLASH、16KB RAM
    2.7V~5.5V寬電壓供電
    一個(gè)16通道12位SAR ADC,兩個(gè)模擬比較器、定時(shí)器、安全模塊等
    SPI、I2C、UART、CAN2.0A/B、KBI等接口,最高支持?jǐn)U展71GPIOs
    電源管理模塊(PMC)具有三種模式:運(yùn)行、等待、停止

PKEAZ128AMLK微控制器的特性:

    基于ARM Cortex-M0+處理器,功耗低,生態(tài)圈廣泛;
    集成了CAN2.0A/B控制器,具備CAN網(wǎng)關(guān)功能,適合需要CAN總線網(wǎng)絡(luò)的應(yīng)用。

三、KEA128的KBI模塊

恩智浦Kinetis KE0x、KEA 系列MCU片上集成有KBI ( Keyboard Interrupts 鍵盤中斷模塊 )。

KEA128有兩個(gè)支持引腳中斷的 KBI 模塊,KBI0和KBI1。

KBI使用總線時(shí)鐘,SIM_SCGC寄存器使能KBI總線時(shí)鐘。
3.1  KBI端口

3.2 模塊功能配置代碼
3.2.1 初始化

void kbi_init(uint_16 kbiNo, uint_8 kbiMod, uint_8 EdgeSelect)
{
//(1)聲明局部變量
uint_8 module; //模塊號(hào)
uint_8 chn; //通道號(hào)
//(2)解析模塊號(hào)和通道號(hào)
kbi_mux_val(kbiNo,&module,&chn);
//(3)根據(jù)不同模塊號(hào)進(jìn)行設(shè)置
switch(module)
{
//(3.1)KBI0模塊
case 0:
SIM_SCGC |= SIM_SCGC_KBI0_MASK; // 使能KBI0總線時(shí)鐘
KBI0_SC = 0; //初始化KBI0_SC寄存器(狀態(tài)寄存器)
if (kbiMod == 0) //進(jìn)行邊緣檢測
{
KBI0_SC |= 0x00;
}
else //否則 檢測和電平控制
{
KBI0_SC |= 0x01;
}
//觸發(fā)條件
if(EdgeSelect == 0) //下降沿或低電平觸發(fā)
{
KBI0_ES |= KBI_ES_KBEDG(0x00); //當(dāng) kbiMod = 0,表示下降沿; 當(dāng) kbiMod = 1,表示下降沿或者低電平觸發(fā)
PORT_PUE0 |= 1<<chn;
}
else //上升沿或低電平觸發(fā)
{
KBI0_ES |= KBI_ES_KBEDG(1<<chn);//當(dāng) kbiMod = 0,表示上升沿; 當(dāng) kbiMod = 1,表示上升沿或者高電平觸發(fā)
}
KBI0_PE |= KBI_PE_KBIPE(1<<chn);//中斷使能:0-31位每一位代表每個(gè)引腳,0 禁止, 1 使能
break;
//(3.1)KBI1模塊
case 1:
SIM_SCGC |= SIM_SCGC_KBI1_MASK; // 使能KBI1總線時(shí)鐘
if (kbiMod == 0) //邊緣檢測
{
KBI1_SC |= 0x00;
}
else //邊緣檢測和電平控制
{
KBI1_SC |= 0x01;
}
if(EdgeSelect == 0) //觸發(fā)條件:0-31位每一位代表每個(gè)引腳
{
KBI1_ES |= KBI_ES_KBEDG(0x00); //當(dāng) kbiMod = 0,表示下降沿; 當(dāng) kbiMod = 1,表示下降沿或者低電平觸發(fā)
PORT_PUE1 |= 1<<chn; //上拉引腳
}
else
{
KBI1_ES |= KBI_ES_KBEDG(1<<chn); //當(dāng) kbiMod = 0,表示上升沿; 當(dāng) kbiMod = 1,表示上升沿或者高電平觸發(fā)
}
KBI1_PE |= KBI_PE_KBIPE(1<<chn); //中斷使能:0-31位每一位代表每個(gè)引腳,0 禁止, 1 使能
break;
}
}

None
3.2.2 KBI模塊中斷使能

void kbi_enable_irq(uint_16 kbiNo)
{
//(1)聲明局部變量
if(kbiNo == 0)
{
KBI0_SC |= KBI_SC_KBSPEN_MASK; //使能清除中斷源引腳寄存器
KBI0_SC |= KBI_SC_RSTKBSP_MASK; //中斷源引腳寄存器清0
KBI0_SC |= KBI_SC_KBIE_MASK; //使能KBI0中斷
}
else
{
KBI1_SC |= KBI_SC_KBSPEN_MASK; //使能清除中斷源引腳寄存器
KBI1_SC |= KBI_SC_RSTKBSP_MASK; //中斷源引腳寄存器清0
KBI1_SC |= KBI_SC_KBIE_MASK; //使能KBI1中斷
}
//(2)清空中斷寄存器
NVIC_ClearPendingIRQ(table_irq_kbi[kbiNo]);
//(3)使能中斷
NVIC_EnableIRQ(table_irq_kbi[kbiNo]);
}

None
3.2.3 禁用KBI引腳中斷

void kbi_disable_pin_irq(uint_16 kbiNo)
{
//(1)聲明局部變量
uint_8 module; //模塊號(hào)
uint_8 chn; //通道號(hào)
//(2)解析模塊號(hào)和通道號(hào)
kbi_mux_val(kbiNo,&module,&chn);
//(3)根據(jù)不同模塊號(hào)進(jìn)行設(shè)置
switch(module)
{
//(3.1)禁止中斷使能:0-31位每一位代表每個(gè)引腳,0 禁止, 1 使能
case 0:
KBI0_PE &= ~KBI_PE_KBIPE(1<<chn);
break;
//(3.2)禁止中斷使能:0-31位每一位代表每個(gè)引腳,0 禁止, 1 使能
case 1:
KBI1_PE &= ~KBI_PE_KBIPE(1<<chn);
break;
}
}

None
3.2.4 使能KBI引腳中斷

void kbi_enable_pin_irq(uint_16 kbiNo)
{
//(1)聲明局部變量
uint_8 module; //模塊號(hào)
uint_8 chn; //通道號(hào)
//(2)解析模塊號(hào)和通道號(hào)
kbi_mux_val(kbiNo,&module,&chn);
//(3)根據(jù)不同模塊號(hào)進(jìn)行設(shè)置
switch(module)
{
//(3.1)KBI0模塊
case 0:
KBI0_PE |= KBI_PE_KBIPE(1<<chn);//中斷使能:0-31位每一位代表每個(gè)引腳,0 禁止, 1 使能
break;
//(3.2)KBI1模塊
case 1:
KBI1_PE |= KBI_PE_KBIPE(1<<chn);//中斷使能:0-31位每一位代表每個(gè)引腳,0 禁止, 1 使能
break;
}
}

None
四、KEA128的時(shí)鐘配置

參見NXP KEA128 DS(S9KEA128P80M48SF0.pdf ),可以知道MCU最高支持48MHz core frequency.

中文版數(shù)據(jù)手冊:

具體的時(shí)鐘定義:

后續(xù)待更:

系統(tǒng)時(shí)鐘(core clock/system clock)與總線時(shí)鐘(bus clock/flash clock),F(xiàn)TM/PWT關(guān)系

core clock = ICSOUTCLK / div1, bus clock = core clock / div2, FTM/PWT時(shí)鐘 = core clock / div3
本文采用 CC BY-NC-SA 4.0 許可協(xié)議,著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請注明出處。
作者:jarrod-zhou
來源:山外K60——學(xué)習(xí)筆記之二 – 科創(chuàng)與算法小屋
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表