#include "regs.h"
void enable_mmu(unsigned long ttb);
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 memcpy(char *dst, char *src, int size);
void do_irq(unsigned long regs[]);
void (*printf)(char *, ...) = 0x43e11434;
void main(void)
{
unsigned long vector_base = 0xffff0000;
unsigned long tt_base = 0x73000000;
unsigned long *pdo_irq = 0x75000000;
extern unsigned long vectors_start, vectors_end;
memset(tt_base, 0x00, 16 * 1024);
mmap(tt_base, vector_base, 0x70000000);
enable_mmu(tt_base);
memcpy(vector_base, vectors_start, 0x100);
*pdo_irq = do_irq;
__asm__ __volatile__ (
"cpsie i\n"
);
//--------------------------------------------------
ICCICR_CPU0 = 1;
ICCPMR_CPU0 = 0xff; //Priority Unmask All Interrupt
ICDDCR = 1;
//------ Watchdog IRQ ID is 75------------------
ICDIPR18_CPU0 = ~(0xff << 24);// the Zero is Highest priority
ICDIPTR18_CPU0 = (1 << 24); // for CPU0 , refer PG815
ICDISER2_CPU0 = (1 << 11); // enable interrupt 0 --- SGI0
//---------- Configure WDT ----------------------
// 200000000 / 128 / 256 = 6103,即頻率6103
WTCNT = 6103; // 1秒鐘減完
WTDAT = 6103; // WTCNT 1秒鐘減完后把WTDAT值裝入WTCNT中繼續(xù)減
WTCON = (1 << 2) | (3 << 3) | (1 << 5) | (0xff << 8) ; //啟動看門狗
}
void do_irq(unsigned long regs[])
{
printf("watchdog: wang wang wang ....\n");
WTCLRINT = 0;
}
void enable_mmu(unsigned long ttb)
{
unsigned long c1_flags;
init_ttb(ttb);
c1_flags = 1 | (1 << 3) | ( 1 << 11) | ( 1 << 13) | (1 << 28);
__asm__ __volatile__ (
"mvn r0, #0 \n"
"mcr p15, 0, r0, c3, c0, 0\n"
"mcr p15, 0, %1, c2, c0, 0\n" //configure ttb
"mrc p15, 0, r0, c1, c0, 0\n"
"orr %0, r0, %0\n"
"mcr p15, 0, %0, c1, c0, 0\n" //enable mmu
:
: "r" (c1_flags), "r" (ttb)
: "r0"
);
}
void init_ttb(unsigned long *ttb_base)
{
unsigned long va, pa;
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 memcpy(char *dst, char *src, int size)
{
int i;
for (i = 0; i < size; i ++)
dst[i] = src[i];
}
__asm__ (
"vectors:\n"
"b reset\n"
"b und\n"
"b swi\n"
"b pre_abt\n"
"b dat_abt\n"
".word 0\n"
"b irq\n"
"b fiq\n"
"reset:\n"
"und:\n"
"mov sp, #0x74000000\n"
"stmfd sp!, {r0-r12, lr}\n"
"mov r0, sp\n"
"mov r3, #0x74000000\n"
"ldr r3, [r3]\n"
"blx r3\n"
"mov sp, #0x74000000\n"
"ldmea sp, {r0-r12, pc}^\n"
"swi:\n"
"pre_abt:\n"
"dat_abt:\n"
"fiq:\n"
"irq:\n"
"mov sp, #0x75000000\n"
"sub lr, lr, #4 \n"
"stmfd sp!, {r0-r12, lr}\n"
"mov r0, sp\n"
"mov r3, #0x75000000\n"
"ldr r3, [r3]\n"
"blx r3\n"
"mov sp, #0x75000000\n"
"ldmea sp, {r0-r12, pc}^\n"
"EOV:\n"
"vectors_start:\n"
".word vectors\n"
"vectors_end:\n"
".word EOV\n"
);
====================================================================
Makefile文件:
default:
arm-linux-gcc -c test.c -o test.o
arm-linux-ld -Ttext=0x70003000 test.o -o test
arm-linux-objcopy -O binary test test.bin
clean:
rm -f test.o test test.bin *~
===============================================================
上一篇:Tiny4412中斷控制器(GIC)之PWM
下一篇:Tiny4412中斷控制器(GIC)之外部中斷
推薦閱讀
史海拾趣
設(shè)計資源 培訓(xùn) 開發(fā)板 精華推薦
- 手機答題抽獎啦:Microchip高端千兆以太網(wǎng)專題知識
- Keysight教你如何提高測試精度,答對問題還有禮品相送,速速參與!
- 學(xué)習(xí)有禮:一場干貨滿滿的電源管理之旅!
- 【有獎直播】 聚焦語音識別核心技術(shù),走進Microchip Timberwolf™音頻處理器研討會
- 高達270MHz!恩智浦LPC3000系列全套資料
- ST直播主題:高度靈活的、易用的、可定制化的協(xié)議棧--BlueNRG-LP 協(xié)議棧介紹
- ST AMG SensorTile開發(fā)大賽駕到,重磅大獎與知識兼得,速來~
- 有獎活動|泰克半導(dǎo)體材料與器件測試技術(shù)【熱門應(yīng)用篇】
- 百度大腦EdgeBoard 邊緣AI計算盒(FZ5)免費測評體驗
- 喜大普奔,起底USB Tybe-C 五大干貨!
- 中國機器人或?qū)烈暼?有望誕生綜合的大集成商
- 配送機器人國內(nèi)市場如何 快速落地的關(guān)鍵點是什么
- 上市公司加入機器人市場是步步為營 還是“棄車保帥”
- 替代側(cè)視鏡 現(xiàn)代摩比斯研發(fā)新監(jiān)控系統(tǒng)
- 佐治亞理工學(xué)院利用超級計算機/機器學(xué)習(xí)分析電子材料 打造更優(yōu)電容器
- 東芝布局汽車LiDAR半導(dǎo)體業(yè)務(wù)
- 三大運營商分別公布5G試點城市 包括各個一線大城市
- 評論:建立有利于半導(dǎo)體行業(yè)發(fā)展的良性機制
- 掉隊的金立 聯(lián)想 魅族們還能趕上5G班車嗎
- 高通就收購恩智浦半導(dǎo)體重新向中國商務(wù)部提出申請