This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] PGA4311EVM:将默认配置写入 PGA

Guru**** 2524460 points
Other Parts Discussed in Thread: SYSCONFIG, LAUNCHXL-F28379D

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/audio-group/audio/f/audio-forum/1041266/pga4311evm-write-default-configuration-to-pga

器件型号:PGA4311EVM
主题中讨论的其他器件:PGA411-Q1SysConfigLAUNCHXL-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)
//{
//;
//}

//
//文件结束
//

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    正如我们在私人消息交换中所讨论的、我们 无法帮助调试您的固件代码、

    此致、
    John