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.

[参考译文] CCS/CC3220SF-LAUNCHXL:写入 GPIO 端口时出现 ISR 故障

Guru**** 2562120 points


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

https://e2e.ti.com/support/wireless-connectivity/wi-fi-group/wifi/f/wi-fi-forum/947646/ccs-cc3220sf-launchxl-fault-isr-error-when-writing-to-gpio-ports

器件型号:CC3220SF-LAUNCHXL

工具/软件:Code Composer Studio

您好!

在我的应用中、我需要使用指针写入 GPIO 端口引脚(而不是使用 GPIO_write 或 GPIO_setConfig 函数)、以加快程序的速度。 有时在启动时、我会在使用指针设置 GPIO 引脚的代码行上遇到故障 ISR 错误。 但是、如果我将代码更改为使用 GPIO_WRITE 或 GPIO_setConfig 函数设置引脚、则不会出现故障 ISR 错误、并且下次使用指针语法运行代码时、不会再出现错误。 首先、我无法弄清是什么导致了错误、或者为什么在我使用 GPIO_write 或 GPIO_setConfig 函数后错误消失。

下面是一段代码、我在其中使用指针来设置 GPIO 端口方向、设置写入使能引脚、并通过 GPIO 寄存器发送消息:

*gpioDir = 0xff;//将端口1设置为
(i=0;i 

以下是一段代码、与上述代码相同、但使用 GPIO_write 或 GPIO_setConfig 函数:

对于(i=0;i<8;i++){
/*为输出配置端口*/
GPIO_setConfig (I、GPIO_CFG_OUT_STD | GPIO_CFG_OUT_LOW | GPIO_CFG_OUT_STR_HIGH);
}
*设置写入使能*/
GPIO_seti (9、GPIO_CFG_OUT_STD | GPIO_CFG_OUT_LOW | GPIO_CFG_OUT_STR_HIGH);
GPIO_WRITE (9、1
= 0);对于<bytesRcvd;i++) {      (I)
对于(j=0;j<8;j++){
/*为输出配置端口*/
GPIO_write (j、(buffer[i]>> j)& 0x01);
}
}
*/取消设置写使能*/
GPIO_WRITE (9,0); 

谢谢、

Michelle Hedlund

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

    尊敬的 Michelle:

    您能否向我展示如何声明指针? 我想了解您正是如何获得更好的时间性能的。

    Jesu

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

    您好、Jesu、

    是的、以下是指针声明:

    volatile unsigned int *gpioReg =(unsigned int*) 0x400053FC;//端口 A1的8位地址(请参阅 TRM 第5.5.1章和 OneNote -> WHD -> TI SimpleLink SugarCube 应用)
    volatile unsigned int *gpioDir =(unsigned int*) 0x40005400; //端口 A1 GPIODIR 的地址(请参阅 TRM 第5.4.2章)
    volatile unsigned int *gpioWrEn =(unsigned int*) 0x40006008;//端口 A2.1的 GPIO17的地址0x40006 0000 0000 1000 = 0x40006008 (请参阅 TRM 第5.5.1章)
    #define GPIO_WR_EN_SET_VALUE 2
    ;// volatile d4000int = 0x40002^ //端口 A3.4的 GPIO28地址0x40007 0000 0100 0000 = 0x40007040 (请参阅 TRM 第5.5.1章)
    #define GPIO_RD_EN_SET_VALUE 16 // 2^4
    volatile unsigned int *gpioWifiClk =(unsigned int*) 0x40007100; //端口 A3.6的 GPIO30地址0x40007 0001 0000 0000 = 0x40007100 (请参阅 TRM 第5.5.1章)
    #define GPIO_WIFI_CLK_SET_VALUE 64 // 2^6
    volatile unsigned int *gpioEmpty =(unsigned int*) 0x40006100;//端口 A2.6的 GPIO22地址0x40006 0x40000000 0001 = 0x40000000 5.5.1 (请参阅 TRM 第5.5.1章) 

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

    感谢您的提供。 我看到您正在尝试直接写入端口寄存器。 出于好奇、如果您在启动时添加延迟、您仍然会遇到故障 ISR? 它可能与初始化有关。

    Jesu