微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI Zigbee设计交流 > 将超声波程序添加到zigbee协议栈后,中断一直无法进入

将超声波程序添加到zigbee协议栈后,中断一直无法进入

时间:10-02 整理:3721RD 点击:

我用了下面的函数在裸机跑是没问题的

但是添加到协议栈之后就没办法接收到tWave的值,协议栈自带的定时函数我也屏蔽了。还是接收不到数据,大神能否帮帮忙
#include <stdio.h>
#include "timer.h"
#include <iocc2530.h>
#include "OnBoard.h"

#define TRIG P0_7
#define ECHO P0_6

void TimerInit();
void WaveInit();
int readdistance();

uint16 tWave;
uint8 flag;
/*****************************************************/
void initUARTSEND(void)
{
CLKCONCMD &= ~0x40; //设置系统时钟源为32MHZ晶振
while(CLKCONSTA & 0x40); //等待晶振稳定
CLKCONCMD &= ~0x47; //设置系统主时钟频率为32MHZ

PERCFG = 0x00; // 设置外设控制为P0
P0SEL = 0x3c; // 选择P0_2,P0_3,P0_4,P0_5作为串口
P2DIR &= ~0XC0; //P0优先作为UART0

U0CSR |= 0x80; //UART方式
U0GCR |= 9;
U0BAUD |=59; //波特率设为19200
UTX0IF = 0; //UART0 TX中断标志初始置位0
}

/********************************************
* @brief 串口发送数据
*
* @param Data - 数据指针
* len - 数据长度
这一部分也不需要添加进去
但是该怎么把数据传输出去呢?用户hauartwrite?
********************************************/
void UartTX_Send_String(char *Data, int len)
{
int j;
for(j = 0; j < len; j++)
{
U0DBUF = *Data++; // 填充数据到串口数据寄存器
while (UTX0IF == 0); // 等待串口发送完毕
UTX0IF = 0; // 将串口中断标志置0,准备下一次的发送
}
}


/****************************
* @brief 延时
*****************************/
void WaitUs(uint8 us)
{
// while (us --)
//{
// asm("nop");asm("nop");asm("nop");asm("nop");
// asm("nop");asm("nop");asm("nop");asm("nop");
// asm("nop");asm("nop");asm("nop");asm("nop");
// asm("nop");asm("nop");asm("nop");asm("nop");
// asm("nop");asm("nop");asm("nop");asm("nop");
// asm("nop");asm("nop");asm("nop");asm("nop");
// asm("nop");asm("nop");asm("nop");asm("nop");
// asm("nop");asm("nop");asm("nop");asm("nop");
//}
MicroWait(1);
}

void WaitMs(uint16 ms)
{
// while (ms --)
//{
//WaitUs(250);
// WaitUs(250);
// WaitUs(250);
//WaitUs(250);
//}
MicroWait(1000);
}


//定时器中断
void TimerInit()
{
T3CTL = 0x06;//SFR( T3CTL , 0xCB ) /* Timer 3 Control
T3CCTL0 = 0x44;//SFR( T3CCTL0 , 0xCC ) /* Timer 3 Channel 0 Capture/Compare Control
T3CCTL1 = 0x00;//SFR( T3CCTL1 , 0xCE ) /* Timer 3 Channel 1 Capture/Compare Control
T3CC1 = 0x00;//SFR( T3CC1 , 0xCF ) /* Timer 3 Channel 1 Capture/Compare Value */
T3CC0 = 0x20;//SFR( T3CC0 , 0xCD ) /* Timer 3 Channel 0 Capture/Compare Value */

EA = 1;
T3IE = 1; // T3 中断使能
}

void WaveInit()
{
P0DIR |= 0x80;
P0DIR &= ~0x40;
TRIG = 0;
}

int readdistance()
{
// char str[16]={0};
int distance;
TRIG = 1;
WaitUs(20);
TRIG = 0;

while (!ECHO);
flag = 1;
tWave = 0;
T3CTL |= 0x18;
while (ECHO);
T3CTL &= ~0x18;
flag = 0;


// sprintf(str, "%.1f\n", (float)tWave*3/58);
//distance = (int)tWave*3/58;
distance = (int)tWave;
WaitMs(1000);
return distance;


}


/*******************************
* @brief T3/4中断服务
*******************************/
#pragma vector = T3_VECTOR
__interrupt void T3_ISR(void)
{
IRCON = 0x00; //清中断标志,也可由硬件自动完成
if (flag)
{
tWave ++;
}
}

哪位能帮我指点一二吗?

添加在协议栈的什么位置,协议栈里面除了对定时器有初始化以外,还有用到一些I/O的,跟你用到的是否有冲突呢?

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

网站地图

Top