智能车制作

标题: 新手刚学XS128单片机,弄了个PIT程序,为什么就进入不了PIT程序呢? [打印本页]

作者: 网络延迟    时间: 2013-9-14 16:27
标题: 新手刚学XS128单片机,弄了个PIT程序,为什么就进入不了PIT程序呢?
#include <hidef.h>      /* common defines and macros */
#include "derivative.h"      /* derivative-specific definitions */
#define LED PORTB
#define LED_dir DDRB
#define  BUS_CLOCK                   32000000           //总线频率
#define  OSC_CLOCK                   16000000           //晶振频率
#define LEDCPU PORTK_PK4
#define LEDCPU_dir DDRK_DDRK4
unsigned char data=0x01;
unsigned int cycle=0;
/*************************************************************/
/*                      初始化锁相环                         */
/*************************************************************/
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×(SYNDIV+1)/(REFDIV+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
}

/*************************************************************/
/*                     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;
PITINTE_PINTE0=1;
PITCFLMT=0x80;    //使能周期中断定时器
}
#pragma CODE_SEG __NEAR_SEG NON_BANKED
interrupt void PIT_INTER(void)
{
  if(PITTF_PTF0 == 1)
    PITTF_PTF0 = 1;    //清除标志位
  cycle+=1;
  if(cycle==2)
  {
      cycle=0;
      data=data<<1;
      if(data==0)
          data=0x01;
      LED = ~data;

  }
  
}
#pragma CODE_SEG DEFAULT


/*************************************************************/
/*                         主函数                            */
/*************************************************************/
void main(void) {
DisableInterrupts;
LED_dir=0xff;       //设置为输出
LED=~data;
INIT_PLL();
EnableInterrupts;
init_PIT();
for(;;)
  {
  }
}
作者: qinlu123    时间: 2013-9-14 17:05
写上中断号试试。
//////////////////////////////PIT定时器初始化/////////////////////////////////////////////////////
void Pit0_Init(void)
{
  PITCFLMT_PITE=0; //disable PIT
  
//  PITCE_PCE0=1; //enable timer channel 0
//  PITCE_PCE1=1; //enable timer channel 1
//  PITCE_PCE2=1; //enable timer channel 2
  PITCE_PCE3=1; //enable timer channel 3
                                                                       
//  PITMUX_PMUX0=0; //ch0 connected to micro timer 0
//  PITMUX_PMUX1=0; //ch1 connected to micro timer 0
//  PITMUX_PMUX2=0; //ch2 connected to micro timer 0
  PITMUX_PMUX3=0; //ch3 connected to micro timer 0

  PITMTLD0=255 ; //micro time base 0 equals 255 clock cycles
  PITMTLD1=255 ; //micro time base 0 equals 255 clock cycles
  
//  PITLD0=0x61a8; //time-out period = (PITMTLD + 1) * (PITLD + 1) / fBUS.
//  PITLD1=1245; //time-out period = (PITMTLD + 1) * (PITLD + 1) / fBUS.
//  PITLD2=249; //time-out period = (PITMTLD + 1) * (PITLD + 1) / fBUS.
  PITLD3=249; //time-out period = (PITMTLD + 1) * (PITLD + 1) / fBUS.
  
//  PITINTE_PINTE0=1; //enable interupt channel 0
//  PITINTE_PINTE1=1; //enable interupt channel 1
//  PITINTE_PINTE2=1; //enable interupt channel 2
  PITINTE_PINTE3=1; //enable interupt channel 2
  
  PITCFLMT_PITE=1; //enable PIT
}
#pragma CODE_SEG __NEAR_SEG NON_BANKED
void interrupt 69 PIT3_ISR(void)
{
}
一共四个66-69.
作者: 网络延迟    时间: 2013-9-14 17:53
qinlu123 发表于 2013-9-14 17:05
写上中断号试试。
//////////////////////////////PIT定时器初始化///////////////////////////////////// ...

谢谢啊 ,原来是我没在project里面定义地址,找了高手帮我解决了





欢迎光临 智能车制作 (http://111.231.132.190/) Powered by Discuz! X3.2