请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:TMS320F28027 工具/软件:TI-RTOS
我在 Hwi 方面有问题。 我接收到脉冲并接收来自超声波传感器的回波。 我能够从 eCAP 获取回波值。
问题是、当我在 Hwi 中断例程中存储时间差值时、由于某种原因无法访问该值。 硬件中断
是 eCAP_ISR (UARg 参数)。 在 idle.cfg 中、我已将中断编号设置为56、中断优先级设置为1、并将事件 ID 设置为-1。
/*
28x 特定空闲示例。
*
*此示例:
*
* 1)在 main()中打印"Hello world"
*
2)打印来自
*的计数器的当前值 在空闲函数内、每次执行
* 计时器中断关闭。
*
*所有输出均路由到日志缓冲区
、*可使用 RTA "原始日志"查看器查看该缓冲区。 加载并运行
*应用程序后,启动 Tools->RTA->Raw Logs 工具
以*查看日志。
//
//#define XDC__STRICT
#define DSP28_DATA_Types
#include
#include
#include
#include "DSP2802x_Device.h"
void DeviceInit (void);
/* Idle 函数用于检查中断是否发生的标志*/
volatile bool isrFlag = false;
/*计数器由计时器中断递增*/
volatile UINT tickCount = 0;
unsigned long int distance;
/*
*=== main ====
*/
int main()
{
/*
*将"Hello world"打印到日志缓冲区。
*
//Log_info0 ("Hello world\n");
DeviceInit();
/*
*启动 BIOS
*执行几个最终初始化、然后执行
*进入持续调用的循环
*已安装空闲函数。
*
BIOS_start();/*不返回*/
return (0);
}
/*
==== myTickFxn =====
*计时器节拍函数、递增计数器并设置 isrFlag。
*/
void myTickFxn (UArg arg)
{
tickCount += 1;//递增计数器*/
isrFlag = true;//告知背景新数据可用*/
}
/*
=== myIdleFxn ===
*从
BIOS_start()线程内反复调用的后台空闲函数*。
*/
void myIdleFxn (void)
{
if (isrFlag = true){
isrFlag = false;
/*
*将 tickCount 的当前值打印到日志缓冲区。
*
log_info1 ("节拍数=%d\n"、tickCount);
}
}
/*
=== eCAP1_ISR ====
*/
void eCAP_ISR (UARg arg)
{
distance = ECap1Regs.CAP2;
ECap1Regs.ECCLR.all = 0xFF;
}