內存管理單元MMU,負責虛擬地址到物理地址的轉換,并提供硬件進制的內存訪問權限檢查,操作系統通過MMU可以實現各個用戶進程自己獨立的地址空間,
通過內存權限的檢查可以保證每個進程使用的內存不被其他進程破壞。具體操作系統怎么運用MMU的就比較復雜了,我們只看看最原始的裸機程序怎么配置寄存器操作MMU建立虛擬地址到物理地址映射,了解其原理。
ARM提供4種映射長度:段(1M),大頁(64K),小頁(4K),極小頁(1k)
按1M的長度映射就是說一段1M的虛擬地址映射一段1M的物理地址,這1M的地址訪問權限是一樣的,明顯如果按1k,4k映射,內存訪問權限將控制的更精細,當然也更復雜。
我們看看1M的精度怎么映射,假設要映射虛擬地址范圍(0x0~0x4000000)到物理地址范圍(0xB0000000~0xB4000000), 每0x100000的地址長度是1M,那么范圍就是64M.
這個映射是以1M對齊的,就是要已(0x0~0x100000)這樣映射,而不能(0x1~0x100001),可以看出虛擬地址和物理地址低20位變化是一樣的,這樣我們只需要一個4byte的內存空間存放每1M的虛擬地址右移20后與物理地址右移20位建立映射,總共4*64byte。代碼大致如下:
unsigned long va = 0x0;
unsigned long pa = 0xB0000000;
while(va<0x4000000){
ttb[va >> 20] = pa | 2;
va += 0x100000;
pa += 0x100000;
}
這樣給定一個虛擬地址0x3000400,右移20作為ttb的index就可以找到其后12位對應的物理地址0xB3000000+0x400就是物理地址,當然這樣運算是mmu自己做的,我們只需要把ttb的內存地址附給mmu的寄存器。上面的過程叫建立頁表,頁表建完后,啟動MMU,我們操作的就是虛擬地址了。啟動MMU是操作cp15協處理器,下面代碼會有說明,了解下。
下面的例子我們用虛擬地址來點led.
#include "regs.h"
void (*uart_asm_putc)(int c) = 0x0202391c;
void (*uart_asm_putx)(int x) = 0x02023940;
#define GPM4CON (*(volatile unsigned int *)0xB10002E0)
#define GPM4DAT (*(volatile unsigned int *)0xB10002E4)
void init_ttb(unsigned long *ttb_base);
void mmap(unsigned long *ttb_base, unsigned long va, unsigned long pa);
void memset(char *buf, char ch, int size);
void led_blink(void);
void delay(volatile int time)
{
for(; time > 0; time-- )
;
}
void main(void)
{
unsigned long c1_flags, ttb = 0x73000000;
volatile int *p = 0x52345678;
*p = 0x8;
init_ttb(ttb);
mmap(ttb, 0x12345678, 0x52345678);
mmap(ttb, 0xB10002E0, 0x110002E0);
c1_flags = 1 | (1 << 3) | ( 1 << 11) | (1 << 28);
__asm__ __volatile__ (
"mvn r0, #0 n"
"mcr p15, 0, r0, c3, c0, 0n"
"mcr p15, 0, %1, c2, c0, 0n" //configure ttb
"mrc p15, 0, r0, c1, c0, 0n"
"orr %0, r0, %0n"
"mcr p15, 0, %0, c1, c0, 0n" //enable mmu
:
: "r" (c1_flags), "r" (ttb)
: "r0"
);
p = 0x12345678;
uart_asm_putc('r');
uart_asm_putc('n');
uart_asm_putc('c');
uart_asm_putc('y');
uart_asm_putc('j');
uart_asm_putc(':');
uart_asm_putx(*p);
uart_asm_putc('r');
uart_asm_putc('n');
led_blink();
}
void init_ttb(unsigned long *ttb_base)
{
unsigned long va, pa;
memset(ttb_base, 0x00, 16 * 1024 );
for (va = 0x00000000; va < 0x10000000; va += 0x100000) { //Others
pa = va;
ttb_base[ va >> 20] = (pa & 0xfff00000) | 2;
}
for (va = 0x10000000; va < 0x14000000; va += 0x100000) { //SFR
pa = va;
ttb_base[ va >> 20] = (pa & 0xfff00000) | 2;
}
for (va = 0x40000000; va < 0x80000000; va += 0x100000) { //DRAM
pa = va;
ttb_base[ va >> 20] = (pa & 0xfff00000) | 2;
}
}
void mmap(unsigned long *ttb_base, unsigned long va, unsigned long pa)
{
ttb_base[ va >> 20] = (pa & 0xfff00000) | 2;
}
void memset(char *buf, char ch, int size)
{
int i;
for (i = 0; i < size; i ++)
buf[i] = ch;
}
void led_blink(void)
{
unsigned long tmp = 0;
int i = 0;
/*
* GPM4_0-GPM4_3 設置為輸出功能
*/
tmp = GPM4CON;
tmp &= ~0xffff;
tmp |= 0x1111;
GPM4CON = tmp;
/*
* 實現流水燈
*/
while(1)
{
GPM4DAT = i;
if (++i == 16)
i = 0;
delay(9999999);
}
}
代碼位置:https://github.com/cyj1988jyc/luoji4412/
上一篇:xynos4412裸機開發 —— A/D轉換器
下一篇:tiny4412 裸機程序 八、重定位到DRAM及LCD實驗
推薦閱讀
史海拾趣
在快速發展的過程中,Compact公司始終注重品牌建設和文化傳承。公司通過不斷提升產品質量和服務水平,樹立了良好的品牌形象。同時,公司還注重培養員工的歸屬感和忠誠度,形成了獨特的企業文化。這種文化傳承不僅為公司的發展提供了強大的精神動力,還使公司在激烈的市場競爭中保持了獨特的競爭力。
進入21世紀后,環保和可持續發展成為全球關注的焦點。Hokuriku Electric積極響應這一趨勢,將環保理念融入產品研發和生產過程中。公司投入大量資源研發綠色電子產品,減少生產過程中的能源消耗和廢棄物排放。同時,Hokuriku Electric還積極參與行業內的環保倡議和合作項目,推動整個電子行業的可持續發展。這一舉措不僅贏得了社會各界的廣泛贊譽,還為公司帶來了更多的商業機會和合作伙伴。
Chipcon AS公司深知人才是企業發展的核心力量。因此,公司一直注重人才的引進和培養。通過與高校和研究機構建立合作關系,公司吸引了大量優秀的研發人才加入。同時,公司還建立了完善的培訓體系,為員工提供了廣闊的職業發展空間。這些措施使得Chipcon AS公司的研發實力不斷增強,為公司的持續發展提供了有力保障。
EWC Controls公司始終將產品質量視為企業的生命線。公司建立了一套嚴格的質量管理體系和檢測流程,確保每一臺產品都符合高標準的質量要求。同時,公司還不斷追求卓越的品質和服務,通過持續改進和創新提升產品的性能和可靠性。這種質量為本、追求卓越的理念使得EWC Controls公司的產品贏得了客戶的信任和好評。
在電子產品市場競爭激烈的背景下,Alpha (Taiwan)公司始終堅持品質至上的原則。公司建立了嚴格的質量管理體系,從原材料采購到生產流程,再到產品出廠,每一個環節都進行嚴格把控。同時,公司還定期對員工進行品質意識培訓,確保每一位員工都能充分認識到品質對于公司發展的重要性。正是憑借這種對品質的執著追求,Alpha (Taiwan)公司的電子產品在市場上贏得了良好的口碑,贏得了眾多客戶的信賴。
面對全球環保意識的日益增強,Alpha (Taiwan)公司積極響應號召,致力于綠色電子產品的研發和生產。公司投入大量資金研發環保材料和技術,成功推出了一系列綠色環保電子產品。這些產品不僅具有優異的性能,而且在使用過程中對環境的影響較小,符合現代社會的環保理念。此外,公司還積極參與環保公益活動,宣傳環保知識,推動電子行業的綠色發展。
不要用數字濾波,這個我已經做了。不管是換芯片,還是調整時序,都可以。 有意思的請聯系我,我在沙坪壩。QQ:3487317 TEL:13883677969… 查看全部問答∨ |
|
目錄、 參考文獻及致謝 第一章 – 儀表放大器的基本原理 第二章 – 儀表放大器的內部原理 第三章 – 單片儀表放大器 第四章 – 單片差分放大器 第五章 – 儀表放大器的應用技巧 第六章 – 儀表放大器與差分放大器的應用電路 ...… 查看全部問答∨ |
[菇房培養應用方案] [食用菌養殖現代化技術] [蘑菇房工廠化技術方案書] 溫度因素溫度是環境條件的諸多因素中最為活躍的因素,也是對食用菌菌種生產、生產和使用影響作用最大的因素。任何種類、任何品種菌絲生長都有其生長溫度范圍 ...… 查看全部問答∨ |
在汽車電子的驅動負載的各種應用中,最常見的半導體元件就是功率MOSFET了。本文不準備寫成一篇介紹功率MOSFET的技術大全,只是讓讀者去了解如何正確的理解功率MOSFET數據表中的常用主要參數,以幫助設計者更好的使用功率MOSFET進行設計。 數據表中 ...… 查看全部問答∨ |
|
replyreload += \',\' + 1653369; DACs, DDSs, PLLs, and Clock Distribution 由于本份材料是英文版的,有需要的請回復下載,分為四個帖子發布。目錄如下 Timson,如果您要查看本帖隱藏內容請回復 … 查看全部問答∨ |