工具与软件:
团队成员、您好!
我使用的是 LAUNCHXL-F28379D、我目前正在使用其中的 CAN 通信。 在那里,我没有建立沟通的问题。 然而、我在处理 ADCIN 数据时遇到了问题。 我想 通过 CAN 将板上的 GPIO 引脚的数据传输到中央计算机。
我已经成功地从数字 GPIO 引脚传输了数据、但来自 ADC 引脚的数据对我来说是个问题。 关于与 ADCIN 引脚对应的数据传输、我需要帮助。
我附加了用于 ADCIN 引脚的语法。
//
//包含的文件
//
#include "device.h"
#include "driverlib.h"
#include "F28x_Project.h"// DSP28x 头文件
#include
#include
#include
#include
#define TX_MSG_OBJ_ID 1.
#define MSG_DATA_LENGTH 8.
//
//对 ADC 数据进行采样的函数
//
int16_t 采样 ADC (void)
{
int16_t 采样;
//
//在 SOC0上强制开始转换
//
AdcaRegs.ADCSOCFRC1.all = 0x01;
//
//等待转换结束
//
while (AdcaRegs.ADCINTFLG.bit.ADCINT1 = 0)
{
//等待 ADCINT1
}
AdcaRegs.ADCINTFLGCLR.bit.ADCINT1 = 1;// Clear ADCINT1
//
//从 SOC0获取 ADC 采样结果
//
样本= AdcaResultRegs.ADCRESULT0;
返回样品;
}
//
//用于初始化 ADC 的函数
//
void 初始化 ADC (void)
{
EALLOW;
//
//配置 ADC 时钟预分频器
//
AdcaRegs.ADCCTL2.bit.prescale = 6;
//
//设置 ADC 分辨率和信号模式
//
AdcSetMode (ADC_ADCA、ADC_Resolution_12bit、ADC_SIGNALMODE_SINGLE);
//
//将脉冲位置设置为较晚
//
AdcaRegs.ADCCTL1.bit.INTPULSEPOS = 1;
//
//打开 ADC 的电源
//
AdcaRegs.ADCCTL1.bit.ADCPWDNZ = 1;
//
//延迟1ms 以允许 ADC 上电
//
DEVICE_DELAY_US (1000);
//
//配置 SOC0以对 ADCIN14进行采样
//
AdcaRegs.ADCSOC0CTL.bit.CHSEL = 0x0E;// SOC0将转换引脚 ADCIN14
AdcaRegs.ADCSOC0CTL.bit.ACQPS = 25;//采样窗口为25+1个 SYSCLK 周期
//
//为 SOC0配置中断
//
AdcaRegs.ADCINTSEL1N2.bit.INT1SEL = 0;// SOC0 end of SOC0将设置 INT1标志
AdcaRegs.ADCINTSEL1N2.bit.INT1E = 1;// Enable INT1 flag (启用 INT1标志)
AdcaRegs.ADCINTFLGCLR.bit.ADCINT1 = 1;// Clear INT1 flag (清除 INT1标志)
EDIS;
}
//
//检查 CAN 状态的功能
//
void checkCANStatus (void)
{
uint16_t canStatus = HWREGH (CANB_BASE + CAN_O_ES);
IF (canStatus 和 CAN_ES_Boff)
{
//处理总线关闭错误
}
IF (CANStatus 和 CAN_ES_EPASS)
{
//处理错误被动条件
}
中频(canStatus 和 CAN_ES_EWARN)
{
//处理错误警告条件
}
}
//
// Main 函数
//
void main (void)
{
//
//初始化设备和外设
//
device_init();
device_initGPIO();
//
//为 CAN 配置 GPIO
//
GPIO_setPinConfig (DEVICE_GPIO_CFG_CANRXB);
GPIO_setPinConfig (DEVICE_GPIO_CFG_CANTXB);
//
//初始化 ADC
//
initializeadc();
//
//初始化 CAN 模块
//
CAN_initModule (CANB_BASE);
CAN_setBitRate (CANB_BASE、DEVICE_SYSCLK_FREQ、250000、16);
//
//配置 CAN 消息目标
//
CAN_setupMessageObject (CANB_BASE、TX_MSG_OBJ_ID、0x181、
CAN_MSG_FRAME_STD、CAN_MSG_OBJ_TYPE_TX、0、
CAN_MSG_OBJ_NO_FLAGS、MSG_DATA_LENGTH);
//
//启动 CAN 模块
//
can_startModule (cNB_BASE);
while (1)
{
//
//获取 ADC 样本
//
int16_t adcData = sampleADC ();
//
//准备 CAN 消息数据
//
uint16_t txMsgData_1[8]={0};
txMsgData_1[0]=(uint16_t)(adcData & 0xFF);// ADC 数据的低8位
txMsgData_1[1]=(uint16_t)((adcData >> 8)& 0xFF);// ADC 数据的高8位
//
//通过 CAN 发送 ADC 数据
//
can_sendMessage (CANB_BASE、TX_MSG_OBJ_ID、MSG_DATA_LENGTH、txMsgData_1);
while (((HWREGH (CANB_BASE + CAN_O_ES)和 CAN_ES_TXOK))= CAN_ES_TXOK)
{
}
DEVICE_DELAY_US (500000);
}
}
任何类型的帮助都将是非常有帮助的。
此致
Gourav