关于ARM s3c44b0x ISR_STARTADDRESS值的确定

bibidaa 2007-10-23 08:20:13
最近在s3c44b0x板子上跑一个中断程序,总是失败,考虑了所有情况后觉得ISR_STARTADDRESS值是个可能出错的地方。源程序上定义了ISR_STARTADDRESS=0xc77ff00,但发现自己的板子是HY57V641620,这个实际上是一个4BANK*1M*16BIT的SDRAM,那这个地方的ISR_STARTADDRESS是不是应该定义为0xc37ff00,可是还是不对,期望高手帮忙啊。
...全文
664 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
ningxin 2007-10-25
  • 打赏
  • 举报
回复
首先,你的UART_printf函数可以工作么?如果可以,Uart_Printf( "\nFS44B0XP Timer0 Interrupt Test!\n" );
应该已经打印出来;

而你的程序,应该是没有执行到下一个打印函数的。
你可以把


void __irq timer0_int(void)
{
rI_ISPC=BIT_TIMER0;
mt0cnt++;

if (mt0cnt >100)
{

mt0cnt=0;
Led_Display(ledstatus);
ledstatus=(~ledstatus)&0x7;
}
else ;
return ;
}
这一段改为:
void __irq timer0_int(void)
{
rI_ISPC=BIT_TIMER0;
mt0cnt++;
Led_Display(1);//或者是其它什么,视你的LED状态而定 不要在这里用printf
//没有return,中断服务程序没有返回值
}
mtOcnt应该是个全局变量,你可以用这个全局变量来判断是否进了中断服务程序。

可以把
while((flag!=10)); //等待中断的产生,10次中断后结束
rTCON=0x0; //停止
rINTMSK=BIT_GLOBAL;
Uart_Printf("\n Timer2 Interrupt Ok\n");

改为
mt0cnt=0;
while((mt0cnt==0)); //等待中断的产生,1次中断后结束 没看到你的flag定义;
rTCON=0x0; //停止
rINTMSK=BIT_GLOBAL;
Uart_Printf("\n Timer2 Interrupt Ok\n");

先试试看,把打印结果也贴上来。
bibidaa 2007-10-25
  • 打赏
  • 举报
回复
是不是这么个原因:
因为板子出厂时,flash的0地址上写有厂家的BIOS程序,其中的中断向量表和自己程序的中断向量表冲突,而一个板子只能有一个中断向量表,所以要把程序烧写到flash中去,因为串口老是打印莫名其妙的字符,也就是进入了BIOS的中断服务程序里?
bibidaa 2007-10-25
  • 打赏
  • 举报
回复
哎,还是不行,最后一句的打印出不来,也就是说一直在循环,我的QQ是454639001,邮箱是mww.luoyn@gmail.com 一般都隐身在线,能不能请楼上帮帮忙看看完整的程序,十分感谢啊。
bibidaa 2007-10-25
  • 打赏
  • 举报
回复
先谢谢哈,晚上贴处结果
ningxin 2007-10-24
  • 打赏
  • 举报
回复
第一,地址的确定,要看你硬件如何接线的。44B0没有MMU,物理地址接的是多少,就是多少;
第二,如果ISR在SDRAM内,那么首先要确保SDRAM是初始化好了的。
第三,你应该尝试去读ISR_STARTADDRESS地方的代码。如果你源程序定义的ISR_STARTADDRESS是0xc77ff00,而你的接线又没有接到那个bank,那么很可能报的错误是data abort 或者预取指令错误等等exception。如果没有exception,只是进了中断就没有出来,那应该是地址可以访问,但是ISR程序有误。你可以通过硬件点灯这类的方式判断是否进入了ISR。
第四,你可以贴一部分代码上来,便于分析问题。
bibidaa 2007-10-24
  • 打赏
  • 举报
回复
-----初始化程序
SMRDATA DATA
;*****************************************************************
; Memory configuration has to be optimized for best performance *
; The following parameter is not optimized. *
;*****************************************************************

;*** memory access cycle parameter strategy ***
; 1) Even FP-DRAM, EDO setting has more late fetch point by half-clock
; 2) The memory settings,here, are made the safe parameters even at 66Mhz.
; 3) FP-DRAM Parameters:tRCD=3 for tRAC, tcas=2 for pad delay, tcp=2 for bus load.
; 4) DRAM refresh rate is for 40Mhz.

;bank0 16bit BOOT ROM SST39VF160/SST39VF320
;bank1 8bit Nand Flash K9F2808U0A/K9F5608U0A
;bank2 16bit IDE & CF Card
;bank3 16bit CS8900
;bank4 8bit PDIUSBD12
;bank5 8bit SL811HST
;bank6 16bit SDRAM
;bank7 8bit SM Card & StepMotor

[ BUSWIDTH=16
DCD 0x01001102 ;Bank0=OM[1:0] 16bit BootRomSST39VF160/SST39VF320) :0x0
; |||||||- Bank1=8bit Nand Flash
; |||||--- Bank2=16bit IDE & CF Card
; ||||---- Bank3=16bit CS8900, Wait status is disable
; |||----- Bank4=8bit PDIUSBD12 , Bank5=8bit SL811HST
; -------- Bank6=16bit SDRAM, Bank7=8bit SM Card & StepMotor

| ;BUSWIDTH=32
DCD 0x22222220 ;Bank0=OM[1:0], Bank1~Bank7=32bit
]

DCD ((B0_Tacs<<13)+(B0_Tcos<<11)+(B0_Tacc<<8)+(B0_Tcoh<<6)+(B0_Tah<<4)+(B0_Tacp<<2)+(B0_PMC)) ;GCS0
DCD ((B1_Tacs<<13)+(B1_Tcos<<11)+(B1_Tacc<<8)+(B1_Tcoh<<6)+(B1_Tah<<4)+(B1_Tacp<<2)+(B1_PMC)) ;GCS1
DCD ((B2_Tacs<<13)+(B2_Tcos<<11)+(B2_Tacc<<8)+(B2_Tcoh<<6)+(B2_Tah<<4)+(B2_Tacp<<2)+(B2_PMC)) ;GCS2
DCD ((B3_Tacs<<13)+(B3_Tcos<<11)+(B3_Tacc<<8)+(B3_Tcoh<<6)+(B3_Tah<<4)+(B3_Tacp<<2)+(B3_PMC)) ;GCS3
DCD ((B4_Tacs<<13)+(B4_Tcos<<11)+(B4_Tacc<<8)+(B4_Tcoh<<6)+(B4_Tah<<4)+(B4_Tacp<<2)+(B4_PMC)) ;GCS4
DCD ((B5_Tacs<<13)+(B5_Tcos<<11)+(B5_Tacc<<8)+(B5_Tcoh<<6)+(B5_Tah<<4)+(B5_Tacp<<2)+(B5_PMC)) ;GCS5
[ BDRAMTYPE="DRAM"
DCD ((B6_MT<<15)+(B6_Trcd<<4)+(B6_Tcas<<3)+(B6_Tcp<<2)+(B6_CAN)) ;GCS6 check the MT value in parameter.a
| ;"SDRAM"
DCD ((B6_MT<<15)+(B6_Trcd<<2)+(B6_SCAN)) ;GCS6
]
DCD ((B7_Tacs<<13)+(B7_Tcos<<11)+(B7_Tacc<<8)+(B7_Toch<<6)+(B7_Tcah<<4)+(B7_Tacp<<2)+(B7_PMC)) ;GCS7

DCD ((REFEN<<23)+(TREFMD<<22)+(Trp<<20)+(Trc<<18)+(Tchr<<16)+REFCNT) ;REFRESH RFEN=1, TREFMD=0, trp=3clk, trc=5clk, tchr=3clk,count=1019
DCD 0x10 ;SCLK power down mode, BANKSIZE 32M/32M
DCD 0x20 ;MRSR6 CL=2clk
DCD 0x20 ;MRSR7
bibidaa 2007-10-24
  • 打赏
  • 举报
回复
应该是没进中断服务程序,因为试着在中断服务里用串口打印数据,没有反应。先谢谢楼上了!
bibidaa 2007-10-24
  • 打赏
  • 举报
回复
先谢谢了,下面是部分程序:
void Led_Display(int LedStatus)
{

rPDATC=(rPDATC&0x1f1)|((LedStatus&0x7)<<1);
}

void __irq timer0_int(void)
{
rI_ISPC=BIT_TIMER0;
mt0cnt++;

if (mt0cnt>100)
{

mt0cnt=0;
Led_Display(ledstatus);
ledstatus=(~ledstatus)&0x7;
}
else ;
return ;
}

void init_timer0(void)
{
rINTMSK=BIT_GLOBAL;


pISR_TIMER0=(int) timer0_int;
rINTCON=0x5;


rTCFG1=0x00000004;
rTCNTB0=(unsigned int)(MCLK_D/(rTCFG0&0x000000ff)/32/100 );
rTCON=0x00a;
rTCON=0x009;
Uart_Printf("begin \n");
rINTMSK=~(BIT_GLOBAL|BIT_TIMER0);

}

void __irq eint4567_int(void)
{
rI_ISPC=BIT_EINT4567;
Led_Display(ledstatus);
ledstatus=(~ledstatus)&0x7;

}
void init_eint4567(void)
{
rINTMSK=~(BIT_GLOBAL|BIT_EINT4567);
pISR_EINT4567=(int) eint4567_int;
rINTCON=0x5;
}


/***************************************************************************
Function name: Main
Parameter : void
Description : 初始化系统时钟,串口,并调用LCD图片显示实验函数
Return : void
Argument :
Autor & date :
****************************************************************************/
void Main(void)
{
int i;
SystemClockInit(); //系统时钟初始化
MemCfgInit(); //设置非Cache区
PortInit(); //端口初始化
CacheEnable(); //Cache允许

SerialSwitch(0); //切换到串口1
SerialChgBaud(115200); //设置串口波特率,115200
rPCONC=0x0015;
rPUPC=0xffff;


//将中断向量和处理程序拷贝到SDRAM的起始地址
//假设中断跳转指令已经烧写到了FLASH的起始地址!!!
if(Image$$RO$$Base!=(char *)0x0c000000) {
U32 *src = (U32 *)Image$$RO$$Base;
U32 *dst = (U32 *)0x0c000000;
for(i=0x00; i<0x400; i++)
dst[i] = src[i];
}

Uart_Printf( "\nFS44B0XP Timer0 Interrupt Test!\n" );
init_timer0();

while((flag!=10)); //等待中断的产生,10次中断后结束
rTCON=0x0; //停止
rINTMSK=BIT_GLOBAL;
Uart_Printf("\n Timer2 Interrupt Ok\n");
}

-----------------------------------------
IsrIRQ ;using I_ISPR register.
sub sp,sp,#4 ;reserved for PC
stmfd sp!,{r8-r9}

;IMPORTANT CAUTION
;if I_ISPC is not used properly, I_ISPR can be 0 in this routine.

ldr r9,=I_ISPR
ldr r9,[r9]

cmp r9, #0x0 ;If the IDLE mode work-around is used,
;r9 may be 0 sometimes.
beq %F2

mov r8,#0x0
0
movs r9,r9,lsr #1
bcs %F1
add r8,r8,#4
b %B0

1
ldr r9,=HandleADC
add r9,r9,r8
ldr r9,[r9]
str r9,[sp,#8]
ldmfd sp!,{r8-r9,pc}

2
ldmfd sp!,{r8-r9}
add sp,sp,#4
subs pc,lr,#4

————————————————————————
;******************************************************** ; Name : 44BINIT.S * ; Modify : hugang, hgx2000@mail.china.com * ; Description: * ; C start up codes * ; Configure memory, Initialize ISR ,stacks * ; Initialize C-variables * ; Fill zeros into zero-initialized C-variables * ;******************************************************** GET ..\inc\option.inc GET ..\inc\memcfg.inc ;**************************************************************************** ;存储器空间 ;GCS6 64M 16bit(8MB) DRAM/SDRAM(0xc000000-0xc7fffff) ;APP RAM=0xc000000~0xc7effff ;44BMON RAM=0xc7f0000-0xc7fffff ;STACK =0xc7ffa00 ;**************************************************************************** ;中断控制预定义 INTPND EQU 0x01e00004 INTMOD EQU 0x01e00008 INTMSK EQU 0x01e0000c I_ISPR EQU 0x01e00020 I_CMST EQU 0x01e0001c I_PMST EQU 0x01e00014 ;**************************************************************************** ;看门狗定时器预定义 WTCON EQU 0x01d30000 ;**************************************************************************** ;系统时钟预定义 PLLCON EQU 0x01d80000 CLKCON EQU 0x01d80004 LOCKTIME EQU 0x01d8000c ;**************************************************************************** ;存储器控制预定义 REFRESH EQU 0x01c80024 ;**************************************************************************** ;BDMA目的寄存器 BDIDES0 EQU 0x1f80008 BDIDES1 EQU 0x1f80028 ;**************************************************************************** ;预定义常数(常量) USERMODE EQU 0x10 FIQMODE EQU 0x11 IRQMODE EQU 0x12 SVCMODE EQU 0x13 ABORTMODE EQU 0x17 UNDEFMODE EQU 0x1b MODEMASK EQU 0x1f NOINT EQU 0xc0 ;**************************************************************************** ;检查是否使用tasm.exe进行编译 GBLL THUMBCODE [ {CONFIG} = 16 THUMBCODE SETL {TRUE} CODE32 | THUMBCODE SETL {FALSE} ] [ THUMBCODE CODE32 ;for start-up code for Thumb mode ] ;;;

6,125

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 硬件设计
社区管理员
  • 硬件设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧