qq_36937460 2018-05-15 14:30 采纳率: 0%
浏览 719
已结题

飞思卡尔编译器不能全速运行

codewarrior 不能全速运行

大家好,本人用的MC9S12S128的飞思卡尔芯片,里面用了简单的定时中断,SCI,下面是源代码。我用的IDE是codewarrior
在运行中有两个现象,1,不能全速运行,只能点一步运行一步。
2,长按f11,在程序运行两个来回以上,拔掉BDM,再上电。程序有可能烧进去了

/*---------------------------------------------------------*/
/************************************************************

************************************************************/
/*---------------------------------------------------------*/
#include /* common defines and macros /
#include "derivative.h" /
derivative-specific definitions */

#define LEDCPU PORTK_PK4
#define LEDCPU_dir DDRK_DDRK4
#define BUS_CLOCK 32000000 //总线频率
#define OSC_CLOCK 16000000 //晶振频率
unsigned char a[56]={0XEB,0X90,0X83};
#define BAUD 38400 //串口波特率

/*************************************************************/
/* 初始化锁相环 /
/
************************************************************/
void INIT_PLL(void)
{
CLKSEL &= 0x7f; //set OSCCLK as sysclk
PLLCTL &= 0x8F; //Disable PLL circuit
CRGINT &= 0xDF;

#if(BUS_CLOCK == 40000000) 
  SYNR = 0x44;
#elif(BUS_CLOCK == 32000000)
  SYNR = 0x43;     
#elif(BUS_CLOCK == 24000000)
  SYNR = 0x42;
#endif 

REFDV = 0x81;         //PLLCLK=2×OSCCLK×(SYNR+1)/(REFDV+1)=64MHz ,fbus=32M
PLLCTL =PLLCTL|0x70;  //Enable PLL circuit
asm NOP;
asm NOP;
while(!(CRGFLG&0x08)); //PLLCLK is Locked already
CLKSEL |= 0x80;        //set PLLCLK as sysclk

}

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

/*************************************************************/
/* 初始化SCI /
/
************************************************************/
void INIT_SCI(void)
{

SCI0BD = BUS_CLOCK/16/BAUD; //设置SCI0波特率为9600
SCI0CR1 = 0x00; //设置SCI0为正常模式,八位数据位,无奇偶校验
SCI0CR2 = 0x08; //允许发送数据,禁止中断功能
}

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

/*************************************************************/
/* 串口发送函数 /
/
************************************************************/
void SCI_send(unsigned char data)
{
while(!SCI0SR1_TDRE); //等待发送数据寄存器(缓冲器)为空
SCI0DRL = data;
}

/*************************************************************/
/* 串口发送字符串函数 /
/
************************************************************/
void send_string(unsigned char j)
{
while(j<56) //判断字符串是否发送完毕
{
SCI_send(a[j]);

}
}

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

/*************************************************************/
/* PIT模块初始化函数 /
/
************************************************************/
void init_PIT(){

/* PITMTLD0=249; //为0通道8位计数器赋值
PITLD0=63999; //为0通道16位计数器赋值 //(249+1)*(63999+1)=16000000个总线周期=0.5秒
PITMUX_PMUX0=0; //第0通道使用微计数器0
PITCE_PCE0=1; //第0通道计数器工作
PITCFLMT=0X80; //使能周期中断定时器
PITINTE_PINTE0=1; //0通道定时器定时中断被使能 */

PITCFLMT=0X00; //禁止PIT模块
PITCE_PCE0=1; // 使能定时器通道0
PITMUX=0X00;//定时器通道0使用Base Timer0(微定时基准0)
PITMTLD0=0XFF;//设置8位微定时装载寄存器0初值
PITLD0=0XFFFF;//设置16位装载寄存器0初值
//定时周期=(PITMTLD0+1)*(PITLD0+1)*(1/fBUS)=0.52428s
PITINTE=0X01;//使能PIT定时器通道0中断
PITCFLMT=0X80;//使能PIT模块

}

#pragma CODE_SEG __NEAR_SEG NON_BANKED
interrupt void PIT_INTER(void)
{ unsigned char i;

if(PITTF_PTF0==1) {

  PITTF_PTF0=1;     //把1改为0      
  LEDCPU=~LEDCPU;
  for (i=0;i=i+1;) 
  {
    send_string(a[i]);   
  }

}

}
#pragma CODE_SEG DEFAULT

/*************************************************************/
/* 主函数 /
/
************************************************************/
void main(void) {
INIT_PLL();
LEDCPU_dir=1; //设置 PORTK_PK4为输出脚位
init_PIT();
INIT_SCI();

EnableInterrupts;

for(;;) {

}

}

  • 写回答

2条回答 默认 最新

  • devmiao 2018-05-15 15:13
    关注

    是不是过热了,造成cpu降低了速度,检查下散热呢

    评论

报告相同问题?

悬赏问题

  • ¥15 求学软件的前人们指明方向🥺
  • ¥50 如何增强飞上天的树莓派的热点信号强度,以使得笔记本可以在地面实现远程桌面连接
  • ¥15 MCNP里如何定义多个源?
  • ¥20 双层网络上信息-疾病传播
  • ¥50 paddlepaddle pinn
  • ¥20 idea运行测试代码报错问题
  • ¥15 网络监控:网络故障告警通知
  • ¥15 django项目运行报编码错误
  • ¥15 STM32驱动继电器
  • ¥15 Windows server update services