完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>
標(biāo)簽 > ch582
CH582為RISCV架構(gòu)的32位微處理器,集成開發(fā)環(huán)境使用基于Eclipse的MounRiver集成開發(fā)環(huán)境,官方為CH582提供了標(biāo)準(zhǔn)的庫(kù)函數(shù),位于“。/EVT/EXAM/SRC”。
CH582集成BLE無(wú)線通訊的32位RISC-V內(nèi)核微控制器。片上集成2Mbps低功耗藍(lán)牙BLE通訊模塊、2個(gè)全速USB主機(jī)和設(shè)備控制器及收發(fā)器、2個(gè)SPI、4個(gè)串口、ADC、觸摸按鍵檢測(cè)模塊、RTC等豐富的外設(shè)資源。
CH582為RISCV架構(gòu)的32位微處理器,集成開發(fā)環(huán)境使用基于Eclipse的MounRiver集成開發(fā)環(huán)境,官方為CH582提供了標(biāo)準(zhǔn)的庫(kù)函數(shù),位于“。/EVT/EXAM/SRC”。
接下來(lái)聚焦提供的標(biāo)準(zhǔn)庫(kù)和TRM。
連接命令文件和系統(tǒng)存儲(chǔ)資源
按照官方給的器件手冊(cè),該開發(fā)板應(yīng)當(dāng)包含4段Flash區(qū)域,但是連接命令文件中僅僅啟用了兩個(gè),即RAM(32k),和FLASH(448k),這些資源足夠應(yīng)付絕大多數(shù)的應(yīng)用場(chǎng)景。另外兩個(gè)沒(méi)有寫明在連接命令文件中的項(xiàng)目分為為:
24KB 系統(tǒng)引導(dǎo)程序存儲(chǔ)區(qū)BootLoader
8KB系統(tǒng)非易失配置信息存儲(chǔ)區(qū)InfoFlash
如果需要使用則需要在連接命令文件中添加如下代碼:
MEMORY
{
BOOT (rx) : ORIGIN = 0x00078000, LENGTH = 24K
INFO (rw) : ORIGIN = 0x0007E000, LENGTH = 8K
}
?
SECTIONS
{
.bootloader :
{
KEEP(*(SORT_NONE(.bootloader)))
。 = ALIGN(4);
} 》BOOT AT》BOOT
.infoflash :
{
。 = ALIGN(4);
} 》INFO AT》INFO
}
在C語(yǔ)言代碼中如果需要使用則需要告訴鏈接器,需要保存的段,需要使用下面的聲明方法:
__attribute__((section(“.bootloader”))) // 用來(lái)修飾需要保存在BootLoader段的代碼和數(shù)據(jù)
__attribute__((section(“.infoflash”))) // 用來(lái)修飾需要保存在InfoFlash段的數(shù)據(jù)
這些代碼保留待用。后面的具體實(shí)現(xiàn)過(guò)程中可能需要。
另外在連接命令文件中提供了一些常量,將來(lái)可能供匯編代碼使用。(可以看完下一節(jié)之后看這里,_highcode_vma_start常量等都是通過(guò)直接在這里通過(guò)PROVIDE關(guān)鍵字導(dǎo)出的)。
另外我們需要關(guān)注到,通過(guò)“用戶級(jí)非易失配置信息”配置可以使能bootloader。在使能之后才會(huì)默認(rèn)從bootloader段代碼開始執(zhí)行。
CFG_BOOT_EN = 1; // 使能BootLoader
片上外設(shè)也分配了相應(yīng)的地址,但是在連接命令文件中并沒(méi)有分配相應(yīng)的存儲(chǔ)空間,這與我平時(shí)使用ti公司的相關(guān)DSP產(chǎn)品實(shí)現(xiàn)方式不同。可以從源代碼中找到實(shí)現(xiàn),以TMR0為例,我們可以找到下面的代碼:
#define R32_TMR0_CONTROL (*((volatile unsigned long)0x40002000)) // RW, TMR0 control
可以看到源代碼中也是通過(guò)直接使用volatile關(guān)鍵字實(shí)現(xiàn)對(duì)于特定外設(shè)進(jìn)行配置的,但是并沒(méi)有在連接命令文件中寫明,也就是直接使用了宏模式,而不是使用連接命令文件綁定的變量模式。
評(píng)注:我在最開始學(xué)習(xí)TI-DSP的時(shí)候,也是通過(guò)volatile關(guān)鍵字直接綁定地址空間的方式來(lái)直接對(duì)外設(shè)的配置寄存器直接實(shí)現(xiàn)讀寫的。這種方法上手快,容易理解。但是TI選擇使用綁定某一個(gè)外設(shè)變量和一段地址空間這種實(shí)現(xiàn)方式的優(yōu)勢(shì)在于DSP將特定的外設(shè)的一組寄存器編址在一起,可以容易地通過(guò)結(jié)構(gòu)體實(shí)現(xiàn)訪問(wèn)。
初始化啟動(dòng)代碼
接下來(lái)可以找到初始化啟動(dòng)代碼“startup_CH583.S”,可以簡(jiǎn)單粗略地觀察一下其中的布置。都是熟悉的配方,下面通過(guò)偽代碼簡(jiǎn)單概括一下框架,然后逐個(gè)詳細(xì)分析。
_start: // .init
jmp _handle_reset
_vector_base: // .vector
// 這里寫明了所有的中斷類型
// 為所有的中斷函數(shù)聲明了weak標(biāo)識(shí)符修飾的函數(shù)
handle_reset: // .handle_reset
// 構(gòu)建堆??蚣?/p>
// 將必要的代碼、數(shù)據(jù)地址加載到寄存器中,
// 初始化全局變量段
// 啟用芯片功能:流水線控制位 & 動(dòng)態(tài)預(yù)測(cè)控制位;打開嵌套中斷、硬件壓棧功能; 配置向量表模式為絕對(duì)地址模式
// 將程序的控制權(quán)交給main函數(shù)
la t0, main
csrw mepc, t0
mret
與其他類型的芯片啟動(dòng)過(guò)程相似。如果有其他朋友需要研究其中的內(nèi)容,可以仔細(xì)分析一下連接命令文件,其中提供了各類代碼的加載地址。
評(píng)注:簡(jiǎn)單,明快,清晰,值得學(xué)習(xí)。
匯編-C接口
如果考慮仔細(xì)研究芯片的具體性能和芯片的一些具體實(shí)現(xiàn),就需要關(guān)注RVMSIS文件夾中的兩個(gè)文件。兩個(gè)文件都提供了一些封裝好的匯編語(yǔ)句,方便用戶直接調(diào)用從而實(shí)現(xiàn)對(duì)于特定功能的使能、關(guān)閉、檢測(cè)。
在core_riscv.h中提供了一系列的內(nèi)聯(lián)函數(shù),主要是針對(duì)PFIC(Programmable Fast Interrupt Controller)的相關(guān)設(shè)置,東西比較細(xì)碎,不做更深入的閱讀,用到再說(shuō),直接繼續(xù)。
標(biāo)準(zhǔn)外設(shè)庫(kù)
接下來(lái)到最關(guān)鍵也是作為用戶最應(yīng)關(guān)注的部分——外設(shè)庫(kù)。接下來(lái)將逐步分析芯片具有的各類外設(shè)。
首先是片上總硬件資源匯總:2Mbps 低功耗藍(lán)牙BLE 通訊模塊、2 個(gè)全速USB主機(jī)和設(shè)備控制器及收發(fā)器、2 個(gè)SPI、4 個(gè)串口(UART)、1個(gè)I2C接口、1個(gè)12位14通道(實(shí)際寫在代碼中可以外界相連的數(shù)目,不包括2個(gè)內(nèi)部通道)ADC、14通道的觸摸按鍵檢測(cè)模塊、RTC、電源控制器。
接下來(lái)從外設(shè)庫(kù)和提供手冊(cè)的角度分析各個(gè)外設(shè)的使用方法和特性。
GPIO
芯片一共提供了40個(gè)IO口,其中GPIOA16個(gè),GPIOB24個(gè),其中GPIOB中16個(gè)通道具有輸入中斷功能,其他8個(gè)不具備輸入中斷功能。
要訪問(wèn)GPIO的輸入輸出數(shù)據(jù)需要借助引腳輸入寄存器:R32_Px_PIN和引腳輸出寄存器R32_Px_OUT,作為GPIO使用時(shí),需要首先借助R32_Px_DIR寄存器寫入GPIO的方向。以上的寄存器是通過(guò)位來(lái)表征每一個(gè)IO口的輸入情況的。
PA 端口中
用于藍(lán)牙門鎖的電容式觸摸按鍵設(shè)計(jì)方案
Demo板所用CH582片上集成DC-DC,使能后可進(jìn)一步降低系統(tǒng)功耗。掃描間隔為0.5秒時(shí),實(shí)測(cè)平均待機(jī)功耗僅約15uA。
編輯推薦廠商產(chǎn)品技術(shù)軟件/工具OS/語(yǔ)言教程專題
電機(jī)控制 | DSP | 氮化鎵 | 功率放大器 | ChatGPT | 自動(dòng)駕駛 | TI | 瑞薩電子 |
BLDC | PLC | 碳化硅 | 二極管 | OpenAI | 元宇宙 | 安森美 | ADI |
無(wú)刷電機(jī) | FOC | IGBT | 逆變器 | 文心一言 | 5G | 英飛凌 | 羅姆 |
直流電機(jī) | PID | MOSFET | 傳感器 | 人工智能 | 物聯(lián)網(wǎng) | NXP | 賽靈思 |
步進(jìn)電機(jī) | SPWM | 充電樁 | IPM | 機(jī)器視覺(jué) | 無(wú)人機(jī) | 三菱電機(jī) | ST |
伺服電機(jī) | SVPWM | 光伏發(fā)電 | UPS | AR | 智能電網(wǎng) | 國(guó)民技術(shù) | Microchip |
Arduino | BeagleBone | 樹莓派 | STM32 | MSP430 | EFM32 | ARM mbed | EDA |
示波器 | LPC | imx8 | PSoC | Altium Designer | Allegro | Mentor | Pads |
OrCAD | Cadence | AutoCAD | 華秋DFM | Keil | MATLAB | MPLAB | Quartus |
C++ | Java | Python | JavaScript | node.js | RISC-V | verilog | Tensorflow |
Android | iOS | linux | RTOS | FreeRTOS | LiteOS | RT-THread | uCOS |
DuerOS | Brillo | Windows11 | HarmonyOS |