查看: 4468|回复: 2

IAR for S08 1.2无法进入中断

[复制链接]

该用户从未签到

2

主题

13

帖子

0

新手上路

Rank: 1

积分
39
最后登录
2025-2-5
发表于 2013-10-8 16:00:59 | 显示全部楼层 |阅读模式
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();/*4M总线时钟,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              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的大神们帮我看看问题是出在那了。
回复

使用道具 举报

  • TA的每日心情
    难过
    2021-12-15 16:01
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    305

    主题

    4701

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    377
    最后登录
    2023-8-16
    发表于 2013-10-9 09:16:48 | 显示全部楼层

    RE:IAR for S08 1.2无法进入中断

    没有在IAR中用过,在CW中是下面的用法,你可以参考一下IAR下面的例程,他的中断定义方式。
    /*****************串口接收中断*************************************
    interrupt 17 void  SCI_RE(void) {
        while(SCIS1_RDRF)   
             BUFF1=SCID;
        SCIS1_RDRF=0;

    }
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    2

    主题

    13

    帖子

    0

    新手上路

    Rank: 1

    积分
    39
    最后登录
    2025-2-5
     楼主| 发表于 2013-10-13 09:43:42 | 显示全部楼层

    RE:IAR for S08 1.2无法进入中断

    我认为是IAR出错了。同样的配置在CW是可以的。问题就出在IAR MAP文件中 中断向量地址存放的是代码类型,这个在IAR for STM8 都是CODE类型的。 可是因为IAR for S08上它却是 RAM 类型。这是错误的!所以就出现在生成S19文件后 RAM区间的数据是被剥离出去的。这就造成我在烧写如S19文件到芯片后 中断向量区没有任何代码指令。
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-9-18 09:38 , Processed in 0.082975 second(s), 21 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表