主题中讨论的其他器件:PGA411-Q1、 SysConfig、 LAUNCHXL-F28379D
我每个人
我正在将 pga411与 f28379d launchpad 连接
当我开始调试代码时、我遇到 void pga411_DefaultCfg (void)函数的问题、
当我逐步开始调试代码时,它会移到 /*伪断言*/的一边

#include "F28x_Project.h"
#include "driverlib.h"
#include "device.h"
//来自 TIDA-00796
#include /* IQ 数学库*/
#include /*标准输入输出库*/
#include /*字符串和数组(对于 mcmcpy)*/
#include "hal.h"/*硬件管理器*/
#include "pga411.h"/* PGA411-Q1驱动器*/
#include "F2837xD_DEVICE.h"
#include "F2837xD_examples.h"
#include "board.h"
//
//定义
//
#define START_TIMER (x){\
x = CpuTimer1Regs.TIM.all;\
CpuTimer1Regs.TCR.bit.TSS = 0;\
}
#define STOP_TIMER (x){\
CpuTimer1Regs.TCR.bit.TSS = 1;\
x = CpuTimer1Regs.TIM.all;\
CpuTimer1Regs.TCR.bit.TRB = 1;\
}
//未验证
float start_time = 0.0;
float stop_time = 0.0;
//
浮点节拍、TIME_IN_us、时间、温度、temp1;
char outbuf[30];//用于字符串转换的 UART 输出数据缓冲器*/
uint16 angle1;
/*********
*内部函数原型
(小部分 /
/*函数从 PGA411读取角度并通过 UART 发送*
void MAIN_GetAngleAndPrint (void);
/*函数从 PGA411读取速度并通过 UART 发送*
void MAIN_GetVeloAndPrint (void);
/*********
*内部功能
(小部分 /
/*函数从 PGA411读取角度并通过 UART 发送*
void MAIN_GetAngleAndPrint (空)
{
使用 IQmathLib 库*计算 PGA411-Q1的角度*
/*_iq19以0.000001907分辨率存储-4096至4095.9998093 */
int16 angle_raw;/*来自 PGA411-Q1寄存器的原始数据*
_iq 角度;/* IQ 数学角度*/
浮动 angle2;
/*终端命令*/
HAL_PutsUART ("角度[Deg]:");
/*从 PGA411-Q1读取数据*/
angle_raw = pga411_ReadReg (DEV_STAT5);
angle_raw &= 0x1FFF;//仅保留 ORDANGLE 位*/
/*将最小步长(LSB)与 ORDANGLE 值相乘*
角度=_IQ19mpy (_IQ19 (360.0 / 4096)、_IQ19 (angle_raw));/* 12b 示例*///原始代码
//角度=_IQ19mpy (_IQ19 (360.0 / 1024)、_IQ19 (angle_raw));// 10位模式示例*/
/*将 IQ 变量转换为字符串*/
_IQ19toa (outbuf、"%4.5f"、角度);
_IQ19toa (outbuf、"%4.5f"、角度);
Angle1 =(int) outbuf[0];
START_TIMER (START_TIME);
/*从 PGA411-Q1读取数据*/
angle_raw = pga411_ReadReg (DEV_STAT5);
angle_raw &= 0x1FFF;//仅保留 ORDANGLE 位*/
/*将最小步长(LSB)与 ORDANGLE 值相乘*
角度=_IQ19mpy (_IQ19 (360.0 / 4096)、_IQ19 (angle_raw));/* 12b 示例*///原始代码
Angle2 =((360.0 / 4096)*(angle_raw);/* 12b 示例*///原始代码
//角度=_IQ19mpy (_IQ19 (360.0 / 1024)、_IQ19 (angle_raw));// 10位模式示例*/
/*将 IQ 变量转换为字符串*/
_IQ19toa (outbuf、"%4.5f"、角度);
STOP_TIMER (STOP_TIME);
节拍数=(START_TIME - STOP_TIME);
time_in_us =节拍数/ 200;
/*打印出缓冲区*/
HAL_PutsUART (outbuf);
/*终端命令*/
HAL_PutsUART ("\t");
}
/*函数从 PGA411读取速度并通过 UART 发送*
void MAIN_GetVeloAndPrint (void)
{
使用 IQmathLib 库*计算 PGA411-Q1的速度*
/*_iq14以0.000061035分辨率存储-131072至131071.9938965 */
int16 velocity_raw;/*来自 PGA411-Q1寄存器的原始数据*
float velocity_float;//第二个补码到浮点转换的 temp
_IQ 速度;/* IQ 数学速度*
/*终端命令*/
HAL_PutsUART ("Velocity [RPM]:");
/*从 PGA411-Q1读取数据*/
Velocity_raw = pga411_ReadReg (DEV_STAT6);
/*将第二个补码转换为浮点*/
if (velocity_raw & 0x0800)/*负数? *
{
/*首先转换为正数*/
Velocity_float =(((~velocity_raw)+ 1)& 0x07FF);
Velocity_float *=-1;/*并使 float 变为负*/
}
其他
{
/*正数、仅保留所需的位*/
Velocity_float =(velocity_raw & 0x07FF);
}
速度=_IQ14mpy (_IQ14 (60 * 20000000 / 33554432)、_IQ14 (velime_float + 1));/* 12b 示例*///原始代码
//速度=_IQ14mpy (_IQ14 (60 * 20000000 / 2097152)、_IQ14 (velime_float + 1));// 10b 示例*/
/*将 IQ 变量转换为字符串*/
_IQ14toa (outbuf、"%7.5f"、速度);
/*打印出缓冲区*/
HAL_PutsUART (outbuf);
/*终端命令*/
HAL_PutsUART ("\n"r);
}
//
//主函
//
void main (void)
{
//
//初始化设备时钟和外设
//
device_init();
//
//将 GPIO 引脚配置为推挽输出
//
DEVICE_initGPIO();
//
//初始化 PIE 并清除 PIE 寄存器。 禁用 CPU 中断。
//
interrupt_initModule();
//
//使用指向 shell 中断的指针初始化 PIE 矢量表
//服务例程(ISR)。
//
interrupt_initVectorTable();
//
//初始化板外设。 这由 SysConfig 文件生成
//
Board_init();
////
//// UART 的代码启动-可在 LAUNCHXL-F28379D 的引脚19和18上看到
////
// unsigned char *msg;
// msg ="\r\n\r\n 动态 UART 工作!\n";
// SCI_writeCharArray (SCI0_BASE、(uint16_t*) msg、33);
//
// uint16 message[5];
//消息='hello';
// SCI_writeCharArray (SCI0_BASE、message、5);//不起作用
//
// SCI_writeCharArray (SCI0_BASE、"hello"、5);//正在工作
////
//// UART 代码结束-可在 LAUNCHXL-F28379D 的引脚19和18上看到
////
GPIO_togglePin (LED1);
DEVICE_DELAY_US (1000000);
HAL_PutsUART ("\r\nhal_PutsUART 函数正在工作! \n\n");
GPIO_togglePin (LED1);
DEVICE_DELAY_US (1000000);
GPIO_writePin (FAULTRES、0);
GPIO_writePin (AMODE、0);
// int a = 1;
// char str[30];
// sprintf (str、"%d"、a);
// hal_PutsUART (str);
// float xyz = 45.5023;
// sprintf (str、"%f"、xyz);
// hal_PutsUART (str);
// hal_PutsUART ("\r\n hal_PutsUART 函数正在工作! \n\n");
DELAY_US (100000);/* 100ms 延迟*/
// pga411_Init();//已插入 PGA411驱动程序*/
pga411_DefaultCfg ();/*在"pga411_regs"中定义的默认配置*/
DELAY_US (10000);/*当激励启用时、抗尖峰脉冲周期为10ms
// pga411_FaultReset();//清除故障(如果有)*/
/*无限循环*/
while (1)
{
DELAY_US (100000);/* 100ms 延迟*/
// hal_doggleLED();controlSTIC 上的/* LED 定期闪烁*/
///* VT100 */
// hal_PutsUART (VT100_CLRSCR);//清除整个屏幕*/
// hal_PutsUART (VT100_GOHOME);//更多光标到左上角*/
/*读取角度并打印*/
MAIN_GetAngleAndPrint();
// temp1 = temp;
// temp = time_in_us;
//时间= temp1 - temp;
/*读取速度并打印*/
MAIN_GetVeloAndPrint();
}
// unsigned char *msg;
// msg ="\r\n 动态 UART 工作!\n";
// SCI_writeCharArray (SCI0_BASE、(uint16_t*) msg、33);
// hal_PutsUART ("\r\n*");
// SCI_writeCharArray (SCI0_BASE、(uint16_t*) outbuf、100);
// hal_PutsUART ("\r\n*");
//查看为什么需要以下行以及是否可以忽略这些行
// EINT;
// ERTM;
// while (1)
//{
//;
//}
}
//
//文件结束
//