新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 從Flash和SRAM中觸發(fā)中斷的過程示例

從Flash和SRAM中觸發(fā)中斷的過程示例

作者: 時間:2016-09-12 來源:網(wǎng)絡 收藏

/*************************************************************

MAIN

***********************************************************/

int main()

{

/*建立系統(tǒng)*/

Initialize();

/*啟動定時器*/

T1_TCR=0x1;

while(1)

{

}

}

/*******************************************************************

初始化

*******************************************************************/

void Initialize()

{

/*初始化PLL(使用10MHz晶振配置),使CPU時鐘達到60MHz*/

/*設置驅(qū)動和應用*/

PLLCFG=0x25;

Feed();

/*開PLL*/

PLLCON=0x1;

Feed();

/*等待PLL設置頻率并鎖定*/

while(!PLLSTAT PLOCK)){}

/*連接PLL作為時鐘源*/

PLLCON=0x3;

Feed();

開啟MAM,設置時鐘數(shù)來取得FLASH MEMORY。

MAMCR=0x2;

MAMTIM=0x4;

設置設備的時鐘(pclk)到系統(tǒng)時鐘(cclk)

VPBDIV=0X1;

初始化GPIO

IODIR = 0Xffff;

IOSET = 0Xffff;

初始化TIMER1

T1_TCR = 0x0;

T1_TC = 0x0;

T1_PR = 0x0;

T1_PC = 0x0;

后面的用戶來填充相關(guān)的值

T1_MR0 = 0x……;

復位,進入相關(guān)的中斷

T1_MCR = 0x3;

初始化VIC

VICINTSEL = 0x0; /*TIMER1選擇為IRQ*/

VICINTEN = 0x20; //TIMER1 中斷允許

VICCNTL0 = 0x25;

ISR 的地址

VICVADDR0 = (unsigned long)IRQHandler;

}

/********************************************************************

TIMER1 ISR

******************************************************************/

_irq void IRQHandler()

{

/*這里是中斷服務子程序。這個中斷需要在TIMER1中清除,然后寫入一個合適的值到VIC向量地址寄存器來更新VIC硬件優(yōu)先級。*/

T1_IR = 0x1;

VICVADDR = 0Xff;

}

/**************************************************************

PLL的反饋頻率

*************************************************************/

void feed()

{

PLLFEED = 0Xaa;

PLLFEED = 0x55;

}

中運行上述代碼所需要進行的改變和增加

鏈接需要按照如下方法配置:中斷向量表(ivt.s)需要鏈接到的底部(0x40000000)。確定相關(guān)的中斷向量位于0x40000000-0x4000003F。其他的文件鏈接到代碼內(nèi)部,可以存放在中。

而且,中斷向量需要被remapped to SRAM。使用MEMAP寄存器,配置它為用戶RAM模式可以實現(xiàn)。

Int main()

{

………………….

初始化 MEMAP

MEMAP = 0x2;

………………………..

}

TIMER1配置為觸發(fā)一個FIQ中斷,代碼從FLASH中運行

例子包含下面的文件:

1. 中斷向量表(ivt.s)

2. 啟動匯編代碼(init.s)

3. 主C文件

本應用筆記只提到了相關(guān)的文件。如果使用其他的交叉編譯環(huán)境,C文件可以保存大部分不動,匯編文件需要更改。

中斷向量表

這些代碼應當被鏈接到0x0。這樣中斷向量和FIQ ISR就被提供給了ARM核。

;*******************************************************************

匯編指令

********************************************************************

AREA IVT,CODE ;新的代碼段

CODE32

IMPORT start

T1_IR EQU 0Xe0008000

ENTRY

;*******************************************************************

LDR PC,=start

LDR PC,Undefined_Addr

LDR PC,SWI_Addr

LDR PC,Prefetch_Addr

LDR PC,Abort_Addr

DCD ;標識

LDR PC,IRQ_Addr

;*******************************************************************

FIQ ISR已經(jīng)自己存放在了 0x1C,取代了放置在這里的LDR 指令

******************************************************************

;清 TIMER1 中斷

MOV R8,#0x1

LDR R9,=T1_IR

STR R8,[R9]

后面的用戶應當增加更多的代碼在這里。

;返回到C main

SUBS PC,R14,#0x04

;*************************************************************************

Undefined_Addr DCD Undefined_Handler

SWI_Addr DCD SWI_Handler

Pregetch_Addr DCD Pregetch_Handler

Abort_Addr DCD Abort_Handler

IRQ_Addr DCD IRQ_Handler


上一頁 1 2 下一頁

關(guān)鍵詞: Flash SRAM 觸發(fā)中斷

評論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉