Thread: SYSBIOS 中讨论的其他器件
您好、专家!
我们向 CX 寻求有关 TI-RTOS 的帮助:
我们将 完成调试过程。 我收到 GPIOPinWrite (GPIO_PORTN_BASE、GPIO_PIN_3、1<<3);指令提供运行时故障。
使用的器件: TM4C129DNCPDT
以获得您的指导。 谢谢你。
此致、
阿奇·A·阿奇
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.
您好、专家!
我们向 CX 寻求有关 TI-RTOS 的帮助:
我们将 完成调试过程。 我收到 GPIOPinWrite (GPIO_PORTN_BASE、GPIO_PIN_3、1<<3);指令提供运行时故障。
使用的器件: TM4C129DNCPDT
以获得您的指导。 谢谢你。
此致、
阿奇·A·阿奇
您好!
原因是 PortN 不是首先启用。 如果外设未启用并且您尝试访问外设寄存器、则会生成总线错误。 在调用 GPIOPinWrite 之前、 应首先启用外设、如下所示。
//
//启用 GPIO 端口 N.
//
SysCtlPeripheralEnable (SYSCTL_Periph_GPION);
//
//检查外设访问是否已启用。
//
while (!SysCtlPeripheralReady (SYSCTL_Periph_GPION)
{
}
//
//启用 GPIO 管脚3。 将方向设置为输出、和
//启用 GPIO 引脚以实现数字功能。
//
GPIOPinTypeGPIOOutput (GPIO_PORTN_BASE、GPIO_PIN_3);
//将端口 N 引脚3设置为高电平。
GPIOPinWrite (GPIO_PORTN_BASE、GPIO_PIN_3、GPIO_PIN_3);
您好 Charles、
感谢您的及时响应。
我们 已经完成了初始化。
SysCtlPeripheralEnable (SYSCTL_Periph_GPION);
while (!SysCtlPeripheralReady (SYSCTL_Periph_GPION)
{
}
GPIOPinTypeGPIOOutput (GPIO_PORTN_BASE、
GPIO_PIN_5|GPIO_PIN_4|GPIO_PIN_3|GPIO_PIN_2|GPIO_PIN_1|GPIO_PIN_0);
很抱歉、但仍然遇到同样的问题。
此致、
阿奇·A·阿奇
您好!
我只需修改 Tiva 的常用 TI-RTOS gpiointerrupt 示例。 我添加了以红色突出显示的行。 我没有看到任何总线故障。 为什么不先尝试? 也许也会显示您的代码。
/*
*=========== gpiointerrupt.c=========
*/
/* XDCtools 头文件*/
#include
#include
/* BIOS 头文件*/
#include
#include
/* TI-RTOS 头文件*/
#include
/*示例/板头文件*/
#include "board.h"
//---------------
// TivaWare 头文件
//---------------
#include
#include
#include "inc/hw_types.h"
#include "inc/hw_memmap.h"
#include "driverlib/sysctl.h"
#include "driverlib/gpio.h"
/* GUI Composer 要读取的变量*/
int count = 0;
/*
*=========== gpioButtonFxn0 =========
* Board_BUTTON0上 GPIO 中断的回调函数。
*/
void gpioButtonFxn0 (unsigned int index)
{
/*清除 GPIO 中断并切换 LED */
GPIO_toggle (Board_LED0);
如果(count++==100){
计数= 0;
}
}
/*
*=========== gpioButtonFxn1 =========
* Board_Button1上的 GPIO 中断的回调函数。
*这可能不适用于所有板。
*/
void gpioButtonFxn1 (unsigned int index)
{
/*清除 GPIO 中断并切换 LED */
GPIO_toggle (Board_LED1);
如果(count++==100){
计数= 0;
}
}
/*
*=========== 主线=========
*/
int main (空)
{
/*调用板初始化函数*/
Board_initGeneral();
Board_initGPIO();
Board_initUART ();
/*打开用户 LED */
GPIO_WRITE (Board_LED0、BOARD_LED_ON);
SysCtlPeripheralEnable (SYSCTL_Periph_GPION);
while (!SysCtlPeripheralReady (SYSCTL_Periph_GPION)
{
}
GPIOPinTypeGPIOOutput (GPIO_PORTN_BASE、
GPIO_PIN_5|GPIO_PIN_4|GPIO_PIN_3|GPIO_PIN_2|GPIO_PIN_1|GPIO_PIN_0);
GPIOPinWrite (GPIO_PORTN_BASE、GPIO_PIN_5|GPIO_PIN_4|GPIO_PIN_3|GPIO_PIN_2|GPIO_PIN_1|GPIO_PIN_0、
GPIO_PIN_5|GPIO_PIN_4|GPIO_PIN_3|GPIO_PIN_2|GPIO_PIN_1|GPIO_PIN_0);
System_printf ("已设置启动 GPIO 中断示例\n 系统提供程序"
"至 SysMin。 Halt the target to view any SysMin contents in "(停止目标以查看中的任何 SysMin 内容)
" ROV.\n");
/* SysMin 仅在您调用 flush 或 exit 时打印到控制台*/
system_flush();
/*安装按钮回调*/
GPIO_setCallback (Board_BUTTON0、gpioButtonFxn0);
/*启用中断*/
GPIO_enableInt (Board_BUTTON0);
/*
*如果您的设备有多个输入引脚,就会中断
*将在 Board_Button1上启用。
*/
如果(Board_BUTTON0!= Board_Button1){
/*安装按钮回调*/
GPIO_setCallback (Board_Button1、gpioButtonFxn1);
GPIO_enableInt (Board_Button1);
}
/*启动 BIOS */
BIOS_start();
返回(0);
}
谢谢、Charles。
我们 观察到、如果 GPIOWrite 指令恰好在初始化后、则没有问题。 但在实际情况下是不可能的。
// 没问题
SysCtlPeripheralEnable (SYSCTL_Periph_GPION);
while (!SysCtlPeripheralReady (SYSCTL_Periph_GPION)
{
}
GPIOPinTypeGPIOOutput (GPIO_PORTN_BASE、
GPIO_PIN_5|GPIO_PIN_4|GPIO_PIN_3|GPIO_PIN_2|GPIO_PIN_1|GPIO_PIN_0);
GPIOPinWrite (GPIO_PORTN_BASE、GPIO_PIN_5|GPIO_PIN_4|GPIO_PIN_3|GPIO_PIN_2|GPIO_PIN_1|GPIO_PIN_0、
GPIO_PIN_5|GPIO_PIN_4|GPIO_PIN_3|GPIO_PIN_2|GPIO_PIN_1|GPIO_PIN_0);
//******* 很有问题
SysCtlPeripheralEnable (SYSCTL_Periph_GPION);
while (!SysCtlPeripheralReady (SYSCTL_Periph_GPION)
{
}
GPIOPinTypeGPIOOutput (GPIO_PORTN_BASE、
GPIO_PIN_5|GPIO_PIN_4|GPIO_PIN_3|GPIO_PIN_2|GPIO_PIN_1|GPIO_PIN_0);
//一些其他指令,然后是 GPIO 写入指令
GPIOPinWrite (GPIO_PORTN_BASE、GPIO_PIN_5|GPIO_PIN_4|GPIO_PIN_3|GPIO_PIN_2|GPIO_PIN_1|GPIO_PIN_0、
GPIO_PIN_5|GPIO_PIN_4|GPIO_PIN_3|GPIO_PIN_2|GPIO_PIN_1|GPIO_PIN_0);
此致、
阿奇·A·阿奇