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.

[参考译文] MSP430FR6989:引脚 PJ.1上的 ICAN#39;t 输出 MCLK

Guru**** 2550310 points
Other Parts Discussed in Thread: MSP-EXP430FR6989

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/568370/msp430fr6989-i-can-t-output-mclk-on-pin-pj-1

器件型号:MSP430FR6989
主题中讨论的其他器件:MSP-EXP430FR6989

您好!

我想在引脚 PJ.1上输出时钟 MCLK、但它不起作用。 我在 MSP-EXP430FR6989上使用 IAR 和 driverlib。

在我的代码中,我写了:

//将 PJ.0、PJ.1和 PJ.2设置为主模块功能输入、SMCLK、MCLK 和 ACLK。
GPIO_setPeripheralModuleFunctionInputPin (GPIO_PORT_PJ、GPIO_PIN0 + GPIO_PIN1 + GPIO_PIN2、GPIO_PRIMARY_MODULE_FUNCTION);
GPIO_setAsOutputPin (GPIO_PORT_PJ、GPIO_PIN0);
GPIO_setAsOutputPin (GPIO_PORT_PJ、GPIO_PIN1);
GPIO_setAsOutputPin (GPIO_PORT_PJ、GPIO_PIN2);

器件运行 、但这些引脚上没有任何内容。 我犯了个错误吗?

感谢您的回复。

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

    您好、Cristhe、

    在 CCS v6.2 DriverLib v3.4中使用以下代码时、我没有遇到任何问题、请确保测量的是正确的引脚(31):

    #include "driverlib.h"
    
    void main (void)
    {
    //停止 WDT
    WDT_A_HOLD (WDT_A_base);
    
    //将 DCO 频率设置为8MHz
    CS_setDCOFreq (CS_DCORSEL_0、CS_DCOFSEL_6);
    
    //将 MCLK、SMCLK 配置为 DCOCLK 的源
    CS_initClockSignal (CS_SMCLK、CS_DCOCLK_select、CS_Clock_divider);
    CS_initClockSignal (CS_MCLK、CS_DCOCLK_select、CS_Clock_divider);
    
    //输出 MCLK
    GPIO_setOutputLowOnPin (
    GPIO_PORT_PJ、
    GPIO_PIN1
    );
    
    GPIO_setPeripheralModuleFunctionOutputPin (
    GPIO_PORT_PJ、
    GPIO_PIN1、
    GPIO_PRIMARY_MODULE_FUNCTION
    );
    
    /*
    *禁用 GPIO 上电默认高阻抗模式以激活
    *先前配置的端口设置
    *
    PMM_unlockLPM5 ();
    
    while (1)
    {
    ;
    }
    } 

    此致、Ryan

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

    如果没有驱动程序库、在我的板上工作正常:

    //输出 ACLK 到 PJ.2
    PJDIR |= BIT2;
    PJSEL0 |= BIT2;
    //将 MCLK 输出到 PJ.1
    PJDIR |= BIT1;
    PJSEL0 |= BIT1;
    

    您是否处于 LPMx 模式?

    您是否解锁了 GPIO 高阻抗?

    PM5CTL0 &=~LOCKLPM5; //禁用 GPIO 上电默认高阻抗模式
    //激活先前配置的端口设置
    

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

    您好!

    感谢您的回复。

    我尝试使用 driverlib 的最后一次更新(V 2_80_00_01)、但没有成功。

    当我使用 PJ.0和 PJ.1作为标准 GPIO 时、它会起作用。

    我的代码:

    #include 
    
    
    
    void Init_Clock (void);
    void Init_I2C (void);
    void LCD_Initializer (uint8_t 对比度);
    void PCA_Initializer (void);
    void LCD_Afficher_Ligne1 (unsigned char *文本);
    void LCD_Afficher_Ligne2 (unsigned char *
    );void PCA_Ecrinchar
    =
    0x60 petr
    
    
    
    = unsigned Timereur_Ur = 0xtintranu_u_RAM u_u600;param u_uint8;/u600 u600 inchar u_u_u_u600 u_u_uintu_u_u_param = 0xu_u_u_uintu_u_u_u_u_u_u.h para.
    
    
    Timer_A_CLOCKSOURCE_SMCLK、 // SMCLK 时钟源
    Timer_A_CLOCKSOURCE_divider _1、 // SMCLK/4 = 2MHz
    2500、 // 1、25ms 去抖周期
    Timer_A_TAIE_INTERRUPT_DISABLE、 //禁用计时器中断
    Timer_A_CCIE_CCR0_INTERRUPT_ENABLE,//启用 CCR0中断
    Timer_A_DO 清除、 //清除值
    对 //开始计时
    器};
    
    
    int main (void){
    
    volatile uint32_t i;
    
    //停止看门狗计时器
    WDT_A_HOLD (_MSP430_BASEADDRESS_WDT_A__);
    
    //将 P1.0设置为输出方向
    
    GPIO_setAsOutputPin (GPIO_PORT_P1、GPIO_PIN0|GPIO_PIN1|GPIO_PIN2|GPIO_PIN3|GPIO_PIN4|GPIO_PIN5|GPIO_PIN6|GPIO_PIN7);
    GPIO_setAsOutputPin (GPIO_PORT_P3、GPIO_PIN2);
    GPIO_setAsOutputPin (GPIO_PORT_P2、GPIO_PIN0);
    
    GPIO_setOutputLowOnPin (GPIO_PORT_P3、GPIO_PIN2);
    GPIO_setOutputHighOnPin (GPIO_PORT_P2、GPIO_PIN0);
    GPIO_setOutputLowOnPin (GPIO_PORT_P1、GPIO_PIN0);
    
    //配置按钮 S1 (P1.1)中断
    GPIO_selectInterruptEdge (GPIO_PORT_P1、GPIO_PIN1、GPIO_HIGH_TO_LOW_TRANSITION);
    GPIO_setAsInputPinWithPullUpResistor (GPIO_PORT_P1、GPIO_PIN1);
    GPIO_clearInterrupt (GPIO_PORT_P1、GPIO_PIN1);
    GPIO_enableInterrupt (GPIO_PORT_P1、GPIO_PIN1);
    
    
    //配置按钮 S2 (P1.2)中断
    GPIO_selectInterruptEdge (GPIO_PORT_P1、GPIO_PIN2、GPIO_HIGH_TO_LOW_TRANSITION);
    GPIO_setAsInputPinWithPullUpResistor (GPIO_PORT_P1、GPIO_PIN2);
    GPIO_clearInterrupt (GPIO_PORT_P1、GPIO_PIN2);
    GPIO_enableInterrupt (GPIO_PORT_P1、GPIO_PIN2);
    
    //配置 INT_PCA (P1.4)中断
    GPIO_selectInterruptEdge (GPIO_PORT_P1、GPIO_PIN4、GPIO_HIGH_TO_LOW_TRANSITION);
    GPIO_setAsInputPinWithPullUpResistor (GPIO_PORT_P1、GPIO_PIN4);
    GPIO_clearInterrupt (GPIO_PORT_P1、GPIO_PIN4);
    GPIO_enableInterrupt (GPIO_PORT_P1、GPIO_PIN4);
    
    
    
    //将 PJ.4和 PJ5.2设置为主模块函数输入、LFXT。
    GPIO_setPeripheralModuleFunctionInputPin (GPIO_PORT_PJ、GPIO_PIN4 + GPIO_PIN5、GPIO_PRIMARY_MODULE_Function);
    
    
    
    //将 P4.0和 P4.1设置为辅助模块功能输入、I2C。
    GPIO_setPeripheralModuleFunctionInputPin (GPIO_PORT_P4、GPIO_PIN0 + GPIO_PIN1、GPIO_secondary 模块_function);
    
    GPIO_setAsOutputPin (GPIO_PORT_PJ、GPIO_PIN0);
    GPIO_setAsOutputPin (GPIO_PORT_PJ、GPIO_PIN1);
    GPIO_setAsOutputPin (GPIO_PORT_PJ、GPIO_PIN2);
    //将 PJ.0、PJ.1和 PJ.2设置为主模块功能输入、SMCLK、MCLK 和 ACLK。
    GPIO_setPeripheralModuleFunctionInputPin (GPIO_PORT_PJ、GPIO_PIN0、GPIO_PRIMARY_MODULE_Function);
    GPIO_setPeripheralModuleFunctionInputPin (GPIO_PORT_PJ、GPIO_PIN1、GPIO_PRIMARY_MODULE_Function);
    GPIO_setPeripheralModuleFunctionInputPin (GPIO_PORT_PJ、GPIO_PIN2、GPIO_PRIMARY_MODULE_Function);
    
    
    //禁用 GPIO 上电默认高阻抗模式
    //激活先前配置的端口设置
    PMM_unlockLPM5 ();
    
    GPIO_clearInterrupt (GPIO_PORT_P1、GPIO_PIN1);
    GPIO_clearInterrupt (GPIO_PORT_P1、GPIO_PIN2);
    GPIO_clearInterrupt (GPIO_PORT_P1、GPIO_PIN4);
    
    //开始去抖计时器
    Timer_A_initUpMode (timer_A0_BASE、&initUpParam_A0);
    
    //启用中断
    _enable_interrupt ();
    
    init_Clock();
    init_i2C();
    
    LCD_Initializer (禁忌);
    LCD_Afficher_Ligne1 (IHM_LectureCompeur);
    LCD_Afficher_Ligne2 (IHM_CptMonoR);
    PCA_Initializer();
    
    PCA_Ecrire (0x01);
    for (i=50000;i>0;i--);
    PCA_Ecrire (0x02);
    for (i=50000;i>0;i--);
    PCA_Ecrire (0x04);
    for (i=50000;i>0;i--);
    PCA_Ecrire (0x08);
    for (i=50000;i>0;i--);
    PCA_Ecrire (0x10);
    for (i=50000;i>0;i--);
    PCA_Ecrire (0x00);
    for (i=50000;i>0;i--);
    PCA_Ecrire (0x1F);
    for (i=50000;i>0;i--);
    
    _BIC_SR_register (LPM3_BITS);
    while (1)
    {
    ;
    
    }
    }
    
    void Init_I2C (void)
    {
    EUSCI_B_I2C_initMasterParam ParamI2C;
    
    ParamI2C.autoSTOPGeneration = EUSCI_B_I2C_SEND_STOP_INALOCK_INTERY_ON_BYTECOUNT_T_THRESHOLD;
    ParamI2C.byteCounterThreshold = 20;
    ParamI2C.datarate = EUSCI_B_I2C_SET_DATA_RATE_100KBPS;
    ParamI2c.Clk = 800000;
    ParamI2C.selectClockSource = EUSCI_B_I2C_CLOCK_CLUSCI_CLUST_CLUSC_SCK_SCK_
    
    EUSCI_B_I2C_DISABLE (EUSCI_B1_BASE);
    EUSCI_B_I2C_initMaster (EUSCI_B1_BASE、&ParamI2C);
    EUSCI_B_I2C_ENABLE (EUSCI_B1_BASE);
    }
    
    void LCD_I2C_SendmasterTimeout (uint8_t Contrast)
    {
    
    EUSCI_B1_setI2C Byteb1_B1_PackeI2C (
    
    0x1000);EUSCI_B1_B1_B1_B1_SendBytek_SlaveTimeout
    
    ;EUSCI_B1_B1_B1 Multitb1_B1 Multitasitasitb1_B1、EUSCI_SlaveI2C (0x1000)
    EUSCI_B_I2C_masterSendMultiByteNextWithTimeout (EUSCI_B1_BASE、对比度、1000);
    EUSCI_B1_I2C_masterWithNextMultiByteNextTimeout (EUSCI_B1_BASE、0x54、1000);
    EUSCI_B_I2C_SendSCI MultiByteTimeout (EUSCI_B1_BASE、0x6E、0x1000)
    
    ;EUSCI_B1_USCI_SendByte_1000
    EUSCI_B_I2C_masterSendMultiByteFinishWithTimeout (EUSCI_B1_base、0x02、1000);
    
    }
    
    void PCA_Initializer (void)
    {
    int n;
    
    EUSCI_B_I2C_setSlaveAddress (EUSCI_B1_BASE、0x20);
    
    
    EUSCI_B_I2C_masterSendMultiByteStartWithTimeout (EUSCI_B1_base、0x03、1000);
    EUSCI_B2_I2C_masterSendMultiByteWithTimeout (EUSCI_B1_base、0xE0、1000);
    for (n=100;n>0;n-);//attente EUSCI_B1_SendMultiByteTimeout
    
    
    
    (0x1000);EUSCI_B1_I2C MultiByte100_1000;EUSCI_B1_SendByte_1000 (0xB1_1000);EUSCI_SendByte2C_SendTimeout (EUSCI_1000)
    
    void PCA_Ecrire (uint8_t Voyant)
    {
    eUSCI_B_I2C_setSlaveAddress (eUSCI_B1_base、0x20);
    eUSCI_B_I2C_masterWithStartTimeout (eUSCI_B1_base、0x01、1000);eUSCI_B1_master1&EUSCI_B1&EUSCI_SendByteTimeout
    
    (0x1000
    
    
    
    
    
    );eUSCI_B1_USCI_B1_B1_USCI_B1_USCI_B1_USCI_USCI_USCI_USCI
    
    //attente
    eUSCI_B_I2C_masterSendMultiByteStartWithTimeout (eUSCI_B1_base、0x40、1000);
    for (n=0;n<15;n++)
    {
    EUSCI_B_I2C_masterSendMultiByteNextWithTimeout (EUSCI_B1_BASE、*文本、1000);
    ++text;
    }
    eUSCI_B_I2C_masterSendMultiByteFinishWithTimeout (eUSCI_B1_base、*文本、1000);
    
    }
    
    void LCD_Afficher_Ligne2 (unsigned char *文本)
    {
    int n;int
    n;eUSCI_B_I2C_setSlaveAddress (eUSCI_B1_base、0x3E);eUSCI_B1_Multitern=1000
    
    
    、e2C_SendTimeout (0x1000);eUSCI_B1_Multitern=1000、eUSCI_B1&b1&b1b1&b1&b1&b1&b1&b1&b1&b1&b1&b1&b1&b1&b1&b1&b1&b1& //attente
    eUSCI_B_I2C_masterSendMultiByteStartWithTimeout (eUSCI_B1_base、0x40、1000);
    for (n=0;n<15;n++)
    {
    EUSCI_B_I2C_masterSendMultiByteNextWithTimeout (EUSCI_B1_BASE、*文本、1000);
    ++text;
    }
    eUSCI_B_I2C_masterSendMultiByteFinishWithTimeout (eUSCI_B1_base、* text、1000);
    
    }
    
    
    //
    *时钟系统初始化
    */
    void Init_Clock ()
    {
    //将 DCO 频率设置为默认8MHz
    CS_setDCOFreq (CS_DCORSEL_0、CS_DCOFSEL_6);
    
    //将 MCLK 和 SMCLK 配置为默认2MHz
    CS_initClockSignal (CS_MCLK、CS_DCOCLK_SELECT、CS_Clock_divider);
    CS_initClockSignal (CS_SMCLK、CS_DCOCLK_SELECT、CS_Clock_divider);
    
    //初始化 XT1晶体振荡器
    CS_TurnOnLFXT (CS_LFXT_DRIVE_3);
    
    }
    
    #pragma vector = Port1_vector
    __interrupt void Port1_ISR (void)
    {
    switch (__evo_in_range (P1IV、P1IV_P1IFG7))
    {
    案例 P1IV_NONE:break;
    案例 P1IV_P1IFG0:中断;
    案例 P1IV_P1IFG1://按下按钮 S1
    ------;
    如果(禁忌< 0x70)
    {
    Contraste = 0x70;
    }
    LCD_Initializer (禁忌);
    LCD_Afficher_Ligne1 (IHM_LectureCompeur);
    LCD_Afficher_Ligne2 (IHM_CptMonoR);
    
    中断;
    案例 P1IV_P1IFG2://按下按钮 S2
    Contraste++;
    如果(禁忌> 0x7F)
    {
    Contraste = 0x7F;
    }
    LCD_Initializer (禁忌);
    LCD_Afficher_Ligne1 (IHM_LectureCompeur);
    LCD_Afficher_Ligne2 (IHM_CptMonoR);
    
    中断;
    案例 P1IV_P1IFG3:break;
    案例 P1IV_P1IFG4:
    
    LCD_Afficher_Ligne1 (IHM_LectureCompeur);
    LCD_Afficher_Ligne2 ("INT_PCA");
    中断;
    案例 P1IV_P1IFG5:中断;
    案件 P1IV_P1IFG6:break;
    案例 P1IV_P1IFG7:中断;
    }
    }
    
    //*
    计时器 A0中断服务例程
    *用作按钮去抖计时器
    */
    #pragma vector = TIMER0_A0_vector
    __interrupt void TIMER0_A0_ISR (void)
    {
    GPIO_toggleOutputOnPin (GPIO_PORT_P1、GPIO_PIN0);
    GPIO_toggleOutputOnPin (GPIO_PORT_P1、GPIO_PIN0);
    
    
    } 

    TimerA 在正确的频率下工作良好。 I2C 总线也能正常工作。

    我检查引脚30、31和32上的信号、而 MCLK、SMCLK 和 ACLK 上没有信号。

    JTAG 端口是否有问题?

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

    //输出 ACLK 到 PJ.2
    PJDIR |= BIT2;
    PJSEL0 |= BIT2;
    //将 MCLK 输出到 PJ.1
    PJDIR |= BIT1;
    PJSEL0 |= BIT1;

    //将 SMCLK 输出到 PJ.0
    PJDIR |= BIT0;
    PJSEL0 |= BIT0;

    谢谢 Mich!!!

    但为什么它不能与 driverlib API 一起使用?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    //将 PJ.0、PJ.1和 PJ.2设置为主模块功能输入、SMCLK、MCLK 和 ACLK。
    GPIO_setPeripheralModuleFunctionInputPin (GPIO_PORT_PJ、GPIO_PIN0、GPIO_PRIMARY_MODULE_Function);
    GPIO_setPeripheralModuleFunctionInputPin (GPIO_PORT_PJ、GPIO_PIN1、GPIO_PRIMARY_MODULE_Function);
    GPIO_setPeripheralModuleFunctionInputPin (GPIO_PORT_PJ、GPIO_PIN2、GPIO_PRIMARY_MODULE_Function); 

    "InputPin"将 PxDIR.y 设置为0、PRIMARY_MODULE_FUNCTION 将两个 PxSEL 位设置为0和1。 这将导致下面标记的配置:

    如果要输出时钟、应将引脚配置为输出

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

    我看不到有两个 API (输入和输出)。
    它现在可以工作了。

    非常感谢。