微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 飞思卡尔单片机ECT问题

飞思卡尔单片机ECT问题

时间:10-02 整理:3721RD 点击:
我ECT的通道0接8赫兹的TTL电平,通道1接768赫兹的TTL电平,中断设为上升沿触发,可是通道1的sum_ut和sum_ua在interrupt 8里串口发送时变成0了,而且不给TTL电平,还是一直在发送数据,这是为什么?当我给TTL电平的时候,它不进interrupt 9的中断,这是为什么啊?
做了好长时间都不行,请各位帮帮忙,万分感谢!
#include <hidef.h>      /* common defines and macros */
#include "derivative.h"      /* derivative-specific definitions */
#define BUS_CLOCK                   32000000           //总线频率
#define OSC_CLOCK                   16000000           //晶振频率
#define BAUD 9600
#define U PTT_PTT0                     
#define V PTT_PTT1                       
#define W PTT_PTT2                       
#define Z PTT_PTT3                        
unsigned int sum_ut,sum_ua,sum_zt=0,sum_za=0;
unsigned int ut[9],ua[9],angle[3];
unsigned int a=0,b=0,c=0,d=0,e=0,f=0,g=0,i,j;
unsigned char *send,data_receive;
/*************************************************************/
/*                      初始化锁相环                         */
/*************************************************************/
void INIT_PLL(void)
{
    CRGINT = 0;                  //关中断
    CLKSEL_PLLSEL = 0;           //在未初始化PLL前不使用PLL的输出作为CPU时钟   
  #if(BUS_CLOCK == 40000000)
    SYNR = 4;
  #elif(BUS_CLOCK == 32000000)
    SYNR = 3;     
  #elif(BUS_CLOCK == 24000000)
    SYNR = 2;                                             
  #endif
    REFDV = 1;                   //PLLCLK=2×OSCCLK×(SYNR+1)/(REFDV+1)=64MHz ,fbus=32M
    PLLCTL_PLLON = 1;            //开PLL
    while (CRGFLG_LOCK == 0);    //等待PLL锁定频率
    CLKSEL_PLLSEL = 1;           //选择系统时钟由PLL产生
}
/************************************************************/
/*                    初始化ECT模块                         */
/************************************************************/
void initialize_ect(void)
{
  TSCR1 = 0x80;    // 定时器使能位. 1=允许定时器正常工作; 0=使主定时器不起作用(包括计数器)
  TIOS  = 0x00;      //指定通道0为输入捕捉方式
  TCTL3 = 0x00;
  TCTL4 = 0x95;            // 设置通道0为捕捉上升沿方式
  PACTL = 0x00;     // PAC2和PAC3级联,1代表级联
  TIE   = 0xff;     // 允许通道0定时中断
  TSCR2 = 0x07;            // 预分频系数pr2-pr0:111,时钟周期为4us,
  TFLG1 = 0xff;            // 清除各IC/OC中断标志位
  TFLG2 = 0xff;     // 清除自由定时器中断标志位
}
/*************************************************************/
/*                        初始化SCI                          */
/*************************************************************/
void INIT_SCI(void)
{
  SCI0BD = BUS_CLOCK/16/BAUD;   //设置SCI0波特率为9600
  SCI0CR1 = 0x00;        //设置SCI0为正常模式,八位数据位,无奇偶校验
  SCI0CR2 = 0x2c;        //允许发送数据,允许发送中断功能
}
/*************************************************************/
/*                       串口发送函数                        */
/*************************************************************/
void SCI_send(unsigned int data)
{
  while(!SCI0SR1_TDRE);         //等待发送数据寄存器(缓冲器)为空
  SCI0DRL = data;
}
/*************************************************************/
/*                       串口接收函数                        */
/*************************************************************/
unsigned char SCI_receive(void)
{
  while(!SCI0SR1_RDRF);          //等待发送数据寄存器满
  return(SCI0DRL);
}
/*************************************************************/
/*                   串口中断发送字符串函数                  */
/*************************************************************/
#pragma CODE_SEG __NEAR_SEG NON_BANKED
void interrupt 8 capture0(void)
{
   TFLG1_C0F = 1;               
   if(a<9)
   {   
     ut[a++]=sum_ut;
     ua[b++]=sum_ua;
     sum_ut=0;
     sum_ua=0;
   }
   if(a==9)
   {
     for(i=1;i<9;i++)
        {
            SCI_send(ut[i]);
            SCI_send(ua[i]);
        }
        a=0;
   }      
}
void interrupt 9 capture1(void)
{
   TFLG1_C4F = 1;                              //速度信号
   if(U==1)
   sum_ut++;
   if(U==0)
   sum_ua++;   
}
#pragma CODE_SEG DEFAULT
/*************************************************************/
/*                         主函数                            */
/*************************************************************/
void main(void) {
  DisableInterrupts;           
  INIT_PLL();
  INIT_SCI();
  initialize_ect();
  EnableInterrupts;                                                               
  for(;;)
  {      
  }                          
}

你的问题解决了吗?我也遇到同样的问题

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top