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/TMS320F28027F:上拉和下拉电阻器

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/811131/ccs-tms320f28027f-pull-up-and-pull-down-resistor

器件型号:TMS320F28027F
主题中讨论的其他器件:C2000WARETMDSCNCD28027TMS320F28027

工具/软件:Code Composer Studio

大家好、

我编写了以下代码、目的是了解内部上拉电阻器。问题是、当我 使用 GPIO (12-31)作为输入 时、我是禁用还是启用 GPAPUD、GPIO 的运行方式始终类似于下拉、即输出端的"0"  我认为这与数据表的建议相反,是否有人能帮助找出并理解问题?  

#include "DSP28x_Project.h"


void GPIO_select (void);
void EPWM1_examplple1 (void);
void GPIO_Toggle (void);

int main (void)
{
int a;

InitSysCtrl ();

GPIO_select ();

for (;){
a = GpioDataRegs.GPADAT.bit.GPIO12;
如果(a = 1)
EPWM1_example1();
其他
GPIO_Toggle ();
}
返回0;

}

void GPIO_select (void)
{
EALLOW;
GpioCtrlRegs.GPAPUD.bit.GPIO0 =1;
GpioCtrlRegs.GPAPUD.bit.GPIO1=1;
GpioCtrlRegs.GPAPUD.bit.GPIO12 =0;


GpioCtrlRegs.GPAMUX1.bit.GPIO0=1;
GpioCtrlRegs.GPAMUX1.bit.GPIO1=1;

GpioCtrlRegs.GPAMUX1.bit.GPIO2=0;
GpioCtrlRegs.GPAMUX1.bit.GPIO12=0;

GpioCtrlRegs.GPADIR.bit.GPIO2=1;
GpioCtrlRegs.GPADIR.bit.GPIO12=0;

EDIS;
}


void EPWM1_examplple1 (void){

GpioDataRegs.GPACLEAR.bit.GPIO2=1;

};

void GPIO_Toggle (){
GpioDataRegs.GPASET.bit.GPIO2=1;
};


提前感谢

 

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

    您是否有任何东西连接到该引脚? 上拉电阻较弱、可能会过载。

    使用内存浏览器读回配置值、以确保您已写入正确的值。 配置是否正确?

    此致、
    Cody

     

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

    您好 Cody、

    感谢您的回复。。

    我没有将任何东西连接到 GPIO 的引脚。

    我观察到的行为相当复杂,我编写了一个非常简单和简单的文件,只观察上拉和下拉行为,其代码如下所示,原因是只要启用 GPIO 的上拉,GPADIR 寄存器就会开始工作 相反、例如 GPACLEAR 启用 LED、反之亦然、您还能帮助说明如果我希望所选 GPIO 的行为都处于下拉状态、应该怎么办。

    提前感谢。

    #include "DSP28x_Project.h"
    
    #define EPWM1_TIMER_TBPRD 1500
    
    void GPIO_select (void);
    void EPWM1_examplple1 (void);
    void GPIO_Toggle (void);
    void delay_loop (void);
    int a;
    
    int main (void)
    {
    
    #ifdef _flash
    memcpy (&RamfuncsRunStart、&RamfuncsLoadStart、(size_t)&RamfuncsLoadSize);
    #endif
    
    InitSysCtrl();
    
    GPIO_select ();
    
    for (;){
    
    a = GpioDataRegs.GPADAT.bit.GPIO6;
    
    如果(a = 1)
    EPWM1_example1();
    其他
    GPIO_Toggle ();
    }
    
    }
    
    void GPIO_select (void)
    {
    EALLOW;
    
    GpioCtrlRegs.GPAPUD.bit.GPIO2 = 0;
    GpioCtrlRegs.GPAMUX1.bit.GPIO2 = 0;
    GpioCtrlRegs.GPADIR.bit.GPIO2 = 1;
    
    GpioCtrlRegs.GPAPUD.bit.GPIO6=0;
    GpioCtrlRegs.GPAMUX1.bit.GPIO6=0;
    GpioCtrlRegs.GPADIR.bit.GPIO6 = 0;
    
    EDIS;
    }
    
    
    void GPIO_TOGGLE1 (void){
    GpioDataRegs.GPACLEAR.bit.GPIO2=1;
    };
    
    void GPIO_Toggle (){
    GpioDataRegs.GPASET.bit.GPIO2=1;
    };
    
    
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Rahul、

    您使用的是什么硬件? 请注意、F28027 LaunchPad 和 controlCARD 上的 LED 均设置为低电平有效。 这是因为它们将电流与同相缓冲器同步。

    如果您使用的是这些套件之一、请参阅 C2000Ware 中的原理图。  

    C:\ti\c2000Ware_2_00_00_02\boards\LaunchPads\LAUNCHXL_F28027

    C:\ti\c2000Ware_2_00_00_02\boards\controlCARDs\TMDSCNCD28027

    此致、
    Cody  

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

    您好 Cody、

    我使用的是 C2000 Launch Pad XL TMS320F28027,正如您所说的,LED 设置为低电平有效,然后是前面提到的代码的行为,如果是可预测的代码,但是, 问题是、如果我使用下面也提到的控制套件 GpioToggle 代码、那么这种行为与低电平有效条件完全相反、即当 GPIOSET 命令变为高电平时 LED 亮起(打开)、当 GPIOCLEAR 变为高电平时熄灭。 您能不能,请帮助您了解实际的差异是什么,还是代码有问题。

    提前感谢。

    //######################################################################################################################
    //
    //文件:example_2802xGpioToggle.c
    //
    //标题:F2802x 器件 GPIO 切换测试程序。
    //
    //假设:
    //
    //此程序需要 F2802x 头文件。
    //
    ////此程序中的所有 I/O 切换。
    在运行此
    //示例之前,请确保//这不会损坏您的硬件。
    //
    //监视示波器上所需的引脚。
    //
    //根据提供的信息,此项目配置为“引导至 SARAM”
    //操作。 2802x 引导模式表如下所示。
    //有关配置 eZdsp 引导模式的信息、
    //请参阅 eZdsp 附带的文档、
    //
    //$Boot_Table
    //当仿真器连接到您的器
    件时,TRSTn 引脚= 1,//将器件设置为 EMU_boot 引导模式。 在此模式下
    、//外设引导模式如下:
    //
    // 引导模式:EMU_KEY EMU_BMODE
    // (0xD00)(0xD01)
    // --------------------------------------
    // 等待!=0x55AA x
    // I/O0x55AA0x0000
    // SCI0x55AA0x0001
    // 等待0x55AA0x0002
    // GET_Mode0x55AA0x0003
    // SPI0x55AA0x0004
    // I2C0x55AA0x0005
    // OTP0x55AA0x0006
    // 等待0x55AA0x0007
    // 等待0x55AA0x0008
    // Saram0x55AA0x000A<-"引导至 SARAM"
    // 闪存0x55AA0x000B
    //等待0x55AA 其他
    //
    ////根据
    上面的引导模式表,通过调试器//将 EMU_KEY 写入0xD00,将 EMU_BMODE 写入0xD01。 构建/加载项目、
    //重置器件和运行示例
    //
    //$END_Boot_Table
    //
    
    ////////说明:
    //
    // 其中包括三个不同的示例。 选择示例
    // (数据、设置/清除或切换)以在使用
    //编译之前执行 位于代码顶部的#define 语句。
    //
    //
    //////// 切换所有 GPIO 端口引脚
    //
    //可以使用示波器观察到引脚。
    //
    //
    //////////##########################################################################################################################
    //$TI 发行版:F2802x 支持库 v230 $//
    $发行 日期:5月8日星期五07:43:05 CDT 2015 $//
    版权所有:版权所有(C) 2008-2015 Texas Instruments Incorporated -//
                http://www.ti.com/ 保留所有权利$
    //############################################################################################################
    
    #include "DSP28x_Project.h" //设备头文件和示例包含文件
    
    //选择要编译的示例。 只应将一个示例设置为1
    //其余应设置为0。
    //使用切换寄存
    
    器切换 I/O //针对此文件中的函数的原型语句。
    void delay_loop (void);
    void GPIO_select (void);
    void GPIO_examplple1 (void);
    void GPIO_example2 (void);
    void GPIO_example3 (void);
    
    void main (void)
    {
    
    #ifdef _flash
    memcpy (&RamfuncsRunStart、&RamfuncsLoadStart、(size_t)&RamfuncsLoadSize);
    #endif
    
    
    InitSysCtrl ();
    
    
    // InitGpio ();
    
    GPIO_select ();
    
    DINT;
    
    GPIO_examplple1 ();
    }
    
    void delay_loop ()
    {
    long int i;
    对于(i = 0;i < 100000;i++){}
    
    
    
    void GPIO_example1 (void)
    {
    
    for (;;)
    {
    
    GpioDataRegs.GPASET.bit.GPIO0 = 1;
    GpioDataRegs.GPACLEAR.bit.GPIO1=1;
    
    delay_loop();
    
    GpioDataRegs.GPACLEAR.bit.GPIO0=1;
    GpioDataRegs.GPASET.bit.GPIO1 = 1;
    
    delay_loop();
    }
    }
    
    
    void GPIO_select (void)
    {
    EALLOW;
    GpioCtrlRegs.GPAMUX1.ALL = 0x00000000;//所有 GPIO
    GpioCtrlRegs.GPAMUX2.ALL = 0x00000000;//所有 GPIO
    GpioCtrlRegs.GPAMUX1.ALL = 0x00000000;//所有 GPIO
    GpioCtrlRegs.GPADIR.ALL = 0xFFFFFFFF;//所有输出
    GpioCtrlRegs.GPBDIR.ALL = 0x0000000F;//所有输出
    EDIS;
    }
    
    
    

      

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

    您使用 GPIO 作为输入还是输出? 您似乎已经更改了先前帖子中尝试执行的操作。

    尝试在第119行放置一个断点并观察输出。 对第124行执行相同操作。

    此致、
    Cody  

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

    此主题将很快关闭、如果此问题尚未解决、请作出响应。

    此致、
    Cody