單芯片解決方案,開啟全新體驗(yàn)——W55MH32 高性能以太網(wǎng)單片機(jī)
W55MH32是WIZnet重磅推出的高性能以太網(wǎng)單片機(jī),它為用戶帶來前所未有的集成化體驗(yàn)。這顆芯片將強(qiáng)大的組件集于一身,具體來說,一顆W55MH32內(nèi)置高性能Arm? Cortex-M3核心,其主頻最高可達(dá)216MHz;配備1024KB FLASH與96KB SRAM,滿足存儲(chǔ)與數(shù)據(jù)處理需求;集成TOE引擎,包含WIZnet全硬件TCP/IP協(xié)議棧、內(nèi)置MAC以及PHY,擁有獨(dú)立的32KB以太網(wǎng)收發(fā)緩存,可供8個(gè)獨(dú)立硬件socket使用。如此配置,真正實(shí)現(xiàn)了All-in-One解決方案,為開發(fā)者提供極大便利。
在封裝規(guī)格上,W55MH32 提供了兩種選擇:QFN100和QFN68。
W55MH32L采用QFN100封裝版本,尺寸為12x12mm,其資源豐富,專為各種復(fù)雜工控場景設(shè)計(jì)。它擁有66個(gè)GPIO、3個(gè)ADC、12通道DMA、17個(gè)定時(shí)器、2個(gè)I2C、5個(gè)串口、2個(gè)SPI接口(其中1個(gè)帶I2S接口復(fù)用)、1個(gè)CAN、1個(gè)USB2.0以及1個(gè)SDIO接口。如此豐富的外設(shè)資源,能夠輕松應(yīng)對工業(yè)控制中多樣化的連接需求,無論是與各類傳感器、執(zhí)行器的通信,還是對復(fù)雜工業(yè)協(xié)議的支持,都能游刃有余,成為復(fù)雜工控領(lǐng)域的理想選擇。 同系列還有QFN68封裝的W55MH32Q版本,該版本體積更小,僅為8x8mm,成本低,適合集成度高的網(wǎng)關(guān)模組等場景,軟件使用方法一致。更多信息和資料請進(jìn)入http://www.w5500.com/網(wǎng)站或者私信獲取。
此外,本W(wǎng)55MH32支持硬件加密算法單元,WIZnet還推出TOE+SSL應(yīng)用,涵蓋TCP SSL、HTTP SSL以及 MQTT SSL等,為網(wǎng)絡(luò)通信安全再添保障。
為助力開發(fā)者快速上手與深入開發(fā),基于W55MH32L這顆芯片,WIZnet精心打造了配套開發(fā)板。開發(fā)板集成WIZ-Link芯片,借助一根USB C口數(shù)據(jù)線,就能輕松實(shí)現(xiàn)調(diào)試、下載以及串口打印日志等功能。開發(fā)板將所有外設(shè)全部引出,拓展功能也大幅提升,便于開發(fā)者全面評估芯片性能。
若您想獲取芯片和開發(fā)板的更多詳細(xì)信息,包括產(chǎn)品特性、技術(shù)參數(shù)以及價(jià)格等,歡迎訪問官方網(wǎng)頁:http://www.w5500.com/,我們期待與您共同探索W55MH32的無限可能。
第七章 GPIO——位帶操作
本章參考資料:《W55MH32-中文參考手冊》存儲(chǔ)器和總線構(gòu)架章節(jié)、GPIO章節(jié)。
1 位帶操作基礎(chǔ)
1.1 位帶技術(shù)概述
位操作是指針對單個(gè)二進(jìn)制比特位的獨(dú)立讀寫操作,這一特性在 51 單片機(jī)開發(fā)中極為常見(51 單片機(jī)通過sbit關(guān)鍵字實(shí)現(xiàn)位定義)。不同于 51 單片機(jī),W55MH32 采用位帶別名區(qū)訪問機(jī)制實(shí)現(xiàn)位操作功能。
在 W55MH32 中,位帶技術(shù)主要應(yīng)用于兩大區(qū)域:
SRAM 位帶區(qū):SRAM 空間的最低 1MB 區(qū)域(地址范圍:0X20000000~0X200FFFFF)
外設(shè)位帶區(qū):片上外設(shè)空間的最低 1MB 區(qū)域(地址范圍:0X40000000~0X40100000)
這兩個(gè) 1MB 的基礎(chǔ)位帶區(qū)除具備常規(guī)存儲(chǔ)操作功能外,還映射了專屬的位帶別名區(qū)。位帶別名區(qū)通過特殊機(jī)制將基礎(chǔ)位帶區(qū)的每個(gè)比特位擴(kuò)展為 32 位字(4 字節(jié)),通過訪問這些擴(kuò)展后的 32 位字,即可實(shí)現(xiàn)對原基礎(chǔ)位帶區(qū)中指定比特位的精準(zhǔn)操作。W55MH32 的內(nèi)存映射與位帶區(qū)關(guān)系可參考下圖:
1.2 位帶區(qū)細(xì)分解析
1.2.1 外設(shè)位帶區(qū)
外設(shè)位帶區(qū)地址范圍為 0X40000000~0X40100000(1MB),覆蓋了 W55MH32 片上外設(shè)的全部寄存器(寄存器地址范圍:0X40000000~0X40029FFF)。其對應(yīng)的位帶別名區(qū)地址范圍為 0X42000000~0X43FFFFFF(32MB),該區(qū)間恰好落在 W55MH32 保留地址空間(0X40030000~0X4FFFFFFF)內(nèi),避免了與其他外設(shè)寄存器地址的沖突。
與 51 單片機(jī)僅部分寄存器支持位操作(如 SBUF 需字節(jié)操作)不同,W55MH32 的所有片上外設(shè)寄存器均支持位帶操作,這一特性顯著提升了底層控制的靈活性。不過需注意:實(shí)際項(xiàng)目中通常不會(huì)對所有寄存器進(jìn)行位操作,僅在需要高頻操作 IO 口等特定場景下,才會(huì)針對性地對 IO 相關(guān)寄存器啟用位操作。
1.2.2 SRAM位帶區(qū)
SRAM 位帶區(qū)地址范圍為 0X20000000~0X200FFFFF(1MB),對應(yīng)的位帶別名區(qū)地址范圍為 0X22000000~0X23FFFFFF(32MB)。由于 SRAM 的位操作需求較少,該區(qū)域的實(shí)際應(yīng)用場景相對有限。
1.3 位帶地址轉(zhuǎn)換機(jī)制
位帶區(qū)的每個(gè)比特位擴(kuò)展為 32 位字后,僅最低有效位(LSB)有效。盡管看似空間利用率不高,但這種設(shè)計(jì)與 W55MH32 的 32 位系統(tǒng)總線架構(gòu)匹配,能確保以 4 字節(jié)為單位的訪問效率最大化。
1.3.1 地址轉(zhuǎn)換公式
通過指針訪問位帶別名區(qū)地址,即可實(shí)現(xiàn)對基礎(chǔ)位帶區(qū)比特位的操作。具體轉(zhuǎn)換公式如下:
外設(shè)位帶別名區(qū)地址:設(shè)基礎(chǔ)位帶區(qū)中某比特所在字節(jié)地址為A,位序號為n(0≤n≤31,實(shí)際范圍由寄存器位寬決定),則其在別名區(qū)的地址為:
AliasAddr= =0x42000000+ (A-0x40000000)*8*4 +n*4
公式解析:
0x42000000:外設(shè)位帶別名區(qū)起始地址
(A - 0x40000000):目標(biāo)比特前的字節(jié)數(shù)
×8×4:單字節(jié) 8 位,每位擴(kuò)展為 4 字節(jié)
n×4:目標(biāo)比特在字節(jié)內(nèi)的偏移(每位占 4 字節(jié))
SRAM 位帶別名區(qū)地址:設(shè)基礎(chǔ)位帶區(qū)中某比特所在字節(jié)地址為A,位序號為n,則其在別名區(qū)的地址為:
AliasAddr= =0x22000000+ (A-0x20000000)*8*4 +n*4
公式解析:公式邏輯與外設(shè)位帶區(qū)一致,僅起始地址(0x22000000)和基礎(chǔ)位帶區(qū)起始地址(0x20000000)不同。
1.3.2 統(tǒng)一宏定義
為簡化操作,可將兩類地址轉(zhuǎn)換合并為統(tǒng)一宏定義:
// 把“位帶地址+位序號”轉(zhuǎn)換成別名地址的宏 #define BITBAND(addr, bitnum) ((addr & 0xF0000000)+0x02000000+((addr & 0x00FFFFFF)<5)+(bitnum<2))
addr & 0xF0000000:提取地址高位(0x40000000 或 0x20000000),用于區(qū)分外設(shè) / SRAM 區(qū)域
+0x02000000:將高位轉(zhuǎn)換為別名區(qū)起始地址(0x42000000 或 0x22000000)
(addr & 0x00FFFFFF) << 5:等效于(A - 基礎(chǔ)區(qū)起始地址)×8×4(屏蔽高位后左移 5 位 =×32=×8×4)
bitnum << 2:等效于n×4(左移 2 位 =×4)
配合以下宏可實(shí)現(xiàn)位帶操作:
// 把一個(gè)地址轉(zhuǎn)換成一個(gè)指針 #define MEM_ADDR(addr) *((volatile unsigned long *)(addr)) // 把位帶別名區(qū)地址轉(zhuǎn)換成指針 #define BIT_ADDR(addr, bitnum) MEM_ADDR(BITBAND(addr, bitnum))
2 GPIO位帶操作實(shí)踐
2.1 GPIO 寄存器映射
外設(shè)位帶區(qū)覆蓋了所有片上外設(shè)寄存器,理論上可通過宏為每個(gè)寄存器位定義別名地址。但實(shí)際開發(fā)中,通常僅針對高頻操作的 GPIO 寄存器(如輸出數(shù)據(jù)寄存器 ODR、輸入數(shù)據(jù)寄存器 IDR)啟用位操作。
根據(jù)手冊,GPIO 的 ODR 和 IDR 寄存器相對于 GPIO 基址的偏移分別為 12 和 8(GPIOx_BASE由庫函數(shù)定義)。具體寄存器地址映射如下:
代碼清單:位帶操作-1 GPIO ODR 和 IDR 寄存器映射
// GPIO ODR 和 IDR 寄存器地址映射 #define GPIOA_ODR_Addr (GPIOA_BASE+12) //0x4001080C #define GPIOB_ODR_Addr (GPIOB_BASE+12) //0x40010C0C #define GPIOC_ODR_Addr (GPIOC_BASE+12) //0x4001100C #define GPIOD_ODR_Addr (GPIOD_BASE+12) //0x4001140C #define GPIOE_ODR_Addr (GPIOE_BASE+12) //0x4001180C #define GPIOF_ODR_Addr (GPIOF_BASE+12) //0x40011A0C #define GPIOG_ODR_Addr (GPIOG_BASE+12) //0x40011E0C #define GPIOA_IDR_Addr (GPIOA_BASE+8) //0x40010808 #define GPIOB_IDR_Addr (GPIOB_BASE+8) //0x40010C08 #define GPIOC_IDR_Addr (GPIOC_BASE+8) //0x40011008 #define GPIOD_IDR_Addr (GPIOD_BASE+8) //0x40011408 #define GPIOE_IDR_Addr (GPIOE_BASE+8) //0x40011808 #define GPIOF_IDR_Addr (GPIOF_BASE+8) //0x40011A08 #define GPIOG_IDR_Addr (GPIOG_BASE+8) //0x40011E08
注:不同單片機(jī)型號的 GPIO 端口數(shù)量可能不同(如 64pin 型號最多僅支持到 C 端口),實(shí)際使用時(shí)需根據(jù)具體型號調(diào)整。
2.2 GPIO位操作宏定義
通過位帶別名區(qū)地址,可直接操作指定 GPIO 端口的單個(gè) IO 口。以下為 GPIO 輸入 / 輸出位操作的宏定義:
代碼清單:位帶操作-2 GPIO 輸入輸出位操作
// 單獨(dú)操作 GPIO的某一個(gè)IO口,n(0,1,2...15),n表示具體是哪一個(gè)IO口 #define PAout(n) BIT_ADDR(GPIOA_ODR_Addr,n) //輸出 #define PAin(n) BIT_ADDR(GPIOA_IDR_Addr,n) //輸入 #define PBout(n) BIT_ADDR(GPIOB_ODR_Addr,n) //輸出 #define PBin(n) BIT_ADDR(GPIOB_IDR_Addr,n) //輸入 #define PCout(n) BIT_ADDR(GPIOC_ODR_Addr,n) //輸出 #define PCin(n) BIT_ADDR(GPIOC_IDR_Addr,n) //輸入 #define PDout(n) BIT_ADDR(GPIOD_ODR_Addr,n) //輸出 #define PDin(n) BIT_ADDR(GPIOD_IDR_Addr,n) //輸入 #define PEout(n) BIT_ADDR(GPIOE_ODR_Addr,n) //輸出 #define PEin(n) BIT_ADDR(GPIOE_IDR_Addr,n) //輸入 #define PFout(n) BIT_ADDR(GPIOF_ODR_Addr,n) //輸出 #define PFin(n) BIT_ADDR(GPIOF_IDR_Addr,n) //輸入 #define PGout(n) BIT_ADDR(GPIOG_ODR_Addr,n) //輸出 #define PGin(n) BIT_ADDR(GPIOG_IDR_Addr,n) //輸入
2.3 主函數(shù)示例
以下為通過位操作控制 GPIO 的主函數(shù)示例:
代碼清單:位帶操作-3 main 函數(shù)
int main(void) { // 程序來到main函數(shù)之前,啟動(dòng)文件:statup_w55mh32_hd.s已經(jīng)調(diào)用 // SystemInit()函數(shù)把系統(tǒng)時(shí)鐘初始化成72MHZ // SystemInit()在system_w55mh32.c中定義 // 如果用戶想修改系統(tǒng)時(shí)鐘,可自行編寫程序修改 LED_GPIO_Config(); while ( 1 ) { PDout(14)= 0; SOFT_Delay(0x0FFFFF); } }
WIZnet 是一家無晶圓廠半導(dǎo)體公司,成立于 1998 年。產(chǎn)品包括互聯(lián)網(wǎng)處理器 iMCU?,它采用 TOE(TCP/IP 卸載引擎)技術(shù),基于獨(dú)特的專利全硬連線 TCP/IP。iMCU? 面向各種應(yīng)用中的嵌入式互聯(lián)網(wǎng)設(shè)備。
WIZnet 在全球擁有 70 多家分銷商,在香港、韓國、美國設(shè)有辦事處,提供技術(shù)支持和產(chǎn)品營銷。
香港辦事處管理的區(qū)域包括:澳大利亞、印度、土耳其、亞洲(韓國和日本除外)。
審核編輯 黃宇
-
單片機(jī)
+關(guān)注
關(guān)注
6061文章
44866瀏覽量
645991 -
WIZnet
+關(guān)注
關(guān)注
3文章
21瀏覽量
42362 -
GPIO
+關(guān)注
關(guān)注
16文章
1258瀏覽量
53461
發(fā)布評論請先 登錄
第七章MMU例子代碼交叉編譯后下載到mini2440后,LED燈一直亮著并沒有閃
GPIO按鍵實(shí)驗(yàn)與位帶操作
電力系統(tǒng)繼電保護(hù)第七章-微機(jī)保護(hù)概述(課件)下載.ppt

快速理解STM32位帶操作原理

第七章 開關(guān)電源PCB排版解析

STM32單片機(jī)---位帶操作

STM32位帶操作-詳解-計(jì)算過程

評論