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.

[参考译文] 编译器/TM4C129ENCPDT:配置端口 M 引脚

Guru**** 2611295 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/767740/compiler-tm4c129encpdt-configuring-port-m-pins

器件型号:TM4C129ENCPDT

工具/软件:TI C/C++编译器

您好!

我将端口 M 引脚配置为输出引脚、以便能够向外部 ADC 芯片输出一些脉冲。

我已经按照如下所示配置了端口、没有编译器错误或警告、但是我在 PM4和 PM5引脚上看不到任何脉冲。

int main (void)
{
//将系统时钟初始化为120MHz
// uint32_t ui32SysClock;
ui32SysClock = ROM_SysCtlClockFreqSet (
(SYSCTL_XTAL_25MHz | SYSCTL_OSC_MAIN |
SYSCTL_USE_PLL | SYSCTL_CFG_VCO_480)、
System_clock);
assert (ui32SysClock = system_clock);

//初始化除 USB 和以太网外连接到 Launchpad 的所有外设、例如 LED、用户按钮和 UART0
PinoutSet (false、false);

//初始化系统
sys_init();


//创建任务

xTaskCreate (demLEDTask、(const portCHAR *)"LED"、
configMINIMAL_STACK_SIZE、NULL、1、NULL);

xTaskCreate (SerialTask、(const portCHAR *)"Serial"、
configMINIMAL_STACK_SIZE、NULL、1、NULL);

xTaskCreate (spi0_receive、(const portCHAR *)"SPI0"、
configMINIMAL_STACK_SIZE、NULL、3、NULL);
xTaskCreate (ADC_START、(const portCHAR *)"ADCSTART"、
configMINIMAL_STACK_SIZE、NULL、2、NULL);

vTaskStartScheduler();
返回0;
}

void sys_init (void)
{
uint32_t i;

//设置连接到虚拟 COM 端口的 UART
UARTStdioConfig (0、57600、system_clock);
//
//必须启用 SSI0外设才能使用。
//
SysCtlPeripheralEnable (SYSCTL_Periph_SSI0);
SysCtlPeripheralEnable (SYSCTL_Periph_GPIOA);
SysCtlPeripheralEnable (SYSCTL_Periph_GPIOM);
… 

引脚定义和端口初始化函数;

请注意、这是一个外部 ADC 芯片答案请勿与微控制器的内部 ADC 相混淆。

#define ADC_OS0 GPIO_PIN_0 //PM0
#define ADC_OS1 GPIO_PIN_1 //PM1
#define ADC_OS2 GPIO_PIN_2 //PM2
#define ADC_BUSY GPIO_PIN_3 //PM3
#define ADC_CNVSTARTA GPIO_PIN_4 //PM4
#define ADC_CNVSTARTB GPIO_PIN_5 //PM5
#define ADC_RANGE GPIO_PIN_6 //PM6
#define ADC_RESET GPIO_PIN_7 //PM7

#define ADC_CS GPIO_PIN_2 //PN2
#define ADC_READ GPIO_PIN_3 //PN3

#define ADC_CTRL1_PORT GPIO_PORTM_BASE
#define ADC_CTRL2_PORT GPIO_PORTN_BASE
#define ADC_LSB_PORT GPIO_PORTD_base
#define ADC_MSB_PORT GPIO_PORTK_base


void ADC_init (void)
{
ROM_GPIOPinTypeGPIOOutput (ADC_CTRL1_PORT、ADC_OS0 | ADC_OS1 | ADC_OS2 | ADC_CNVSTARTA | ADC_CNVSTARTB | ADC_RANGE | ADC_RESET);
ROM_GPIOPinTypeGPIOOutput (ADC_CTRL2_PORT、ADC_CS | ADC_READ);

ROM_GPIOPinTypeGPIOInput (ADC_CTRL1_PORT、ADC_BUSY);//将 ADC_BUSY 引脚配置为输入
ROM_GPIOPinTypeGPIOInput (ADC_MSB_PORT、0xFF);//将 ADC MSB 数据引脚配置为输入
ROM_GPIOPinTypeGPIOInput (ADC_LSB_PORT、0xFF);//将 ADC LSB 数据引脚配置为输入

GPIOPadConfigSet (ADC_CTRL1_PORT、ADC_CNVSTARTA | ADC_CNVSTARTB、
GPIO_Strength _2mA、GPIO_PIN_TYPE_STD);


}

void ADC_start (void * pvParameters)
{
uint32_t i;
for (;;)
{
GPIOPinWrite (ADC_CTRL1_PORT、ADC_CNVSTARTA、0x0);
GPIOPinWrite (ADC_CTRL1_PORT、ADC_CNVSTARTB、0x0);
for (i=0;i<42949;i++){}
GPIOPinWrite (ADC_CTRL1_PORT、ADC_CNVSTARTA、0x1);
GPIOPinWrite (ADC_CTRL1_PORT、ADC_CNVSTARTB、0x1);

vTaskDelay (1000);

}


} 

我不知道是什么,我是不是什么?

下面是我的逻辑分析仪的快照、显示 A3和 A4 (分别连接到 PM4和 PM5)为低电平。

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

    您好、Sahil、

    当您执行 GPIOPinWrite 时、传递的第三个参数必须是要切换的引脚。 它正在寻找索引、而不是0或1。

    例如、而不是

    GPIOPinWrite (ADC_CTRL1_PORT、ADC_CNVSTARTA、0x1); 

    应用

    GPIOPinWrite (ADC_CTRL1_PORT、ADC_CNVSTARTA、ADC_CNVSTARTA); 

    要关闭引脚、您可以像现在一样使用0x0。

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