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.

[参考译文] 如何初始化和启用外部中断以及从 GPIO 读取数据

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/568710/how-to-initialize-and-enable-external-interrupts-and-read-data-from-gpio

大家好、

硬件:DRV8312基板、F2805X 控制器卡

我正在尝试创建一个外部中断并 从 GPIO 读取数据。 然后触发电机以使用不同的配置运行。

但我遇到了一个无法从 GPIO 正确读取数据的问题。 始终从 GPIO 读取0x00、(I 发送0x08)  

我恐怕外部中断的初始化出了问题。

我修改了 proj_lab01.c-void main (void)、如下所示:

void main (void)
{
//仅在从闪存运行时使用
//请注意变量 FLASH 由项目
#ifdef FLASH 定义
//将时间关键代码和闪存设置代码复制到 RAM
// RamfuncsLoadStart、RamfuncsLoadEnd 和 RamfuncsRunStart
//符号由链接器创建。 请参阅链接器文件。
Memcopy ((uint16_t *)&RamfuncsLoadStart、(uint16_t *)&RamfuncsLoadEnd、(uint16_t *)&RamfuncsRunStart);
#endif

//初始化硬件层
halHandle = HAL_init (&hal、sizeof (hal));/enable_enable_Interrupts

/ enable_enable/enable_enable_enable/enable_enable_enable/enable_enable_enable_interrupts (halts/enable_enable_enable_enable_enable_enable_enable_enable_enable/enable_enable_enable_enable_enable_enable_enable_enable_enable_enable_enable/enable_enable_enable_enable_enable_enable_enable_enable_












中断如下所示:

interrupt void writeSignalISR (void)
{
static Int32_t temp;

HAL_Obj * obj =(HAL_Obj *) halHandle;

if (GPIO_getData (obj->gpioHandle、GPIO_Number_10)= 0)
{
if (Commandobj = 1)
{
HAL_setGpioDirection (obj_portion= 0

);GPIO_pioPort_pion= 0);GPIO_pioPort_pion_pion_pioDirection;GPIO_pion_pion= 0;GPIO_pion_pioPort_pion_pioPort_pion= 0
命令= temp;
DataCounter = 0;
if (命令= 0x08)//FW 版本
{//PROD_VER_STUK/0x7E
TransmitData[0]= 0xFF;
TransmitData[1]= 0x80;//0xFE 或0xF4
TransmitData[2]= 0xFF;
GPIO_setPortData (obj->goHandle<gobj)、TransmitData (
while)、GPIO_TransmitData_Port[GPIO_Outputle]、GPIO_TransmitData_OutHandle](while)、GPIO_TransmitData_OutHandle_Port[GPIO... GPIO_Number_8)==0);//等待 Wr=1
HAL_setGpioDirection (halHandle、GPIO_Direction_Output);// GPIO 作为输出
}
否则(Command ==0)//ProductID
{....................} 
//确认 XINT1中断
HAL_acqExtInt (halHandle);

return;
}//结束 writeSignalISR ()函数 

我在以下内容之后添加了断点:

HAL_setGpioDirection (halHandle、GPIO_Direction_Input);
temp = GPIO_getPortData (obj->gpioHandle、GPIO_Port_A);
temp &= 0x000000FF;
命令= temp; 

temp 始终读为0、它有时在开始时读为128、然后始终读为0。  我使用示波器检查硬件信号,绝对有一个来自 GPIO 的写入信号。 但我无法从调试模式正确读取它。

有 initIntVectorTable:

//! \brief 初始化中断矢量表
//! \details 将 ISR 指向函数 mainISR。
//! \param[in]处理硬件抽象层(HAL)处理
静态内联 void HAL_initIntVectorTable (HAL_Handle handle)
{
HAL_Obj * obj =(HAL_Obj *) handle;
PI_Obj * PIE =(PI_Obj *) obj->压 电筒;


ENABLE_PROTECTED 寄存器_写入_模式;

PIE -> XIRE=
XIRE- XINSTR=&INSTR= XINSTR- XINSTR=写入 IALPIE = INCASTE&INT1-&INCASTE&INT =写入 ISR


PI->SCIRXINTB =&scibrxISR;
PI->SCIRXINTC =&scicrxISR;

disable_protected_register_write_mode;

return;
}// HAL_initIntVectorTable()函数的末尾 

是否有人知道如何解决此问题?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您正在使用哪些 GPIO 线路? 您能否确认 HAL_setupGpio()中的 GPIO_setMode()设置是否正确?

    肖恩