注册会员
- 积分
- 38
- 威望
- 23
- 贡献
- 11
- 兑换币
- 10
- 注册时间
- 2013-10-8
- 在线时间
- 2 小时
- 毕业学校
- 广东机电职业技术学院
|
1贡献
void SYS_SCLK(void) /*系统时钟初始化*/
{
//FL16时钟模块为ICS
/*
ICS 的 FLL 将倍频数固定为512 ,可输出16MHz到20MHz的频率,
而 ICG 的 FLL则具有8 个软件可选的倍频值,还另有一个预分频
器,既可用于高频(>1MHz ),也可用于低频(<100kHz)的参考时钟。
ICG 的FLL 能够输出8MHz 到 40MHz的频率,同时对参考时钟的限制也较少
*/
ICSC1=0x18;//外部时钟,FEE,高增益。
ICSC2=0x3C; //256分频,高增益
while(ICSSC_OSCINIT==0); //判断锁定位
__MY_CLR_WATCHDOG();//清看门狗
SOPT2=0x0;//看门狗选择内部时钟源1 kHz ,使能看门狗
SOPT1=0xC2;//256毫秒
}
void time1_init(void)/*8M总线时钟,10毫秒中断一次*/
{ /*8M总线时钟,10毫秒中断一次*/
TPM1SC=0x4E;//允许溢出中断,总线时钟源,1/64分频因子
TPM1MODH=0x00;
TPM1MODL=0x80;
}
void SYS_init(void)
{
SYS_SCLK(); /*系统时钟初始化*/
Port_init();//管脚初始化
time1_init();/*8M总线时钟,10毫秒中断一次*/
}
int main(void)
{
__disable_interrupt();//关闭总中断
SYS_init();//系统初始化
__MY_CLR_WATCHDOG();//清看门狗
__enable_interrupt();//使能中断
while(1)//主程序
{
Dis_Play();//显示
__MY_CLR_WATCHDOG();//清看门狗
}
}
/* 定时器1中断 */
#pragma vector = Vtpm1ovf
__interrupt __root void time1(void)
{
if(TPM1SC_TOF){TPM1SC_TOF=0;}//先读寄存器方可清零,清除溢出标志位
Ext_FAN_OUT=1;//外风机
return;
}
程序大概如此。中断是进入,一进入就复位。把程序烧写进芯片后,接着把芯片里面的程序读出来,发现 FLASH地址0xFFE4:FFE5 全为0XFF,OXFF。
说明中断函数入口根本没有指令。
.xcl文件空间定义:
-Z(CODE)RCODE=C000-FFAF,FFB8-FFFF
-P(CODE)CODE=C000-FFAF,FFB8-FFFF
-P(CONST)DATA8_ID,DATA16_ID,DATA16_C,CHECKSUM=C000-FFAF,FFB8-FFFF
-Omotorola-s19,(DATA)=FLASH.s19
可是在IAR MAP文件中
****************************************
* *
* SEGMENTS IN ADDRESS ORDER *
* *
****************************************
SEGMENT SPACE START ADDRESS END ADDRESS SIZE TYPE ALIGN
======= ===== ============= =========== ==== ==== =====
__aseg DATA 0000 rel 0
DATA8_AN CODE 0000 - 0003 4 rel 0
CODE 0006 - 0008 3
CODE 000B - 000B 1
CODE 0020 - 0020 1
CODE 0023 - 0024 2
CODE 0038 - 003D 6
1 DATA 0040 - 0043 4 rel 0
DATA16_Z DATA 0044 - 0059 16 rel 0
DATA16_I DATA 005A dse 0
CSTACK CODE 0240 - 043F 200 rel 0
DATA16_AN CODE 1800 - 1800 1 rel 0
CODE 1802 - 1803 2
CODE 1820 - 1820 1
CODE 1825 - 1825 1
CODE 1840 - 1841 2
CODE 1844 - 1845 2
CODE 1848 - 1849 2
CODE 1858 - 1859 2
CODE 185B - 185B 1
RCODE CODE C000 - C0A6 A7 rel 0
1 CODE C0A7 - C38D 2E7 rel 0
INTVEC_C DATA FFD2 - FFD3 2 rel 0
DATA FFDC - FFDD 2 //这里为什么会是data?应该是CODE才是啊
DATA FFE4 - FFE5 2 //
DATA FFFA - FFFD 4 //
INTVEC CODE FFFE - FFFF 2 rel 0
DATA8_ID CONST C38E dse 0
DATA16_ID CONST C38E dse 0
是不是S19文件只能存放 CODE类型的代码 DATA类型就不能了。
所以在烧入的时候就没把中断向量里面的DATA数据加载进去呢。
恳请用过IAR S08的大神们帮我看看问题是出在那了。
|
|