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.

[参考译文] MSP432P401R:EUSCI_B3_BASE AS I2C与INT_EUSCIB3不配合TIMER_A2_BASE AS PWM工作

Guru**** 2595770 points


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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/630264/msp432p401r-eusci_b3_base-as-i2c-with-int_euscib3-not-working-with-timer_a2_base-as-pwm

部件号:MSP432P401R

您好,

我的问题是,一旦PWM TIMER_A2_BASE启动,EUSCI_B3_BASE上的I2C通信就会停止。

相同的PWM与 EUSCI_B2_BASE或EUSCI_B1_BASE一起工作。

I2C代码在  EUSCI_B1_BASE = EUSCI_B2_BASE = EUSCI_B3_BASE上完全相同  

该问题是 由于EUSCI_B3_BASE与 TIMER_A2_BASE一起工作的触发器造成的。

当两者不能同时工作时,它们都能正常工作。

也许是优先事项?

我的I2C初始化:

/*初始化USI_B3和I2C主设备以与从属设备进行通信*/
MAP_I2C_INITMaster (EUSCI_B3_BASE,&i2cConfig3);

MAP_I2C_setMode (EUSCI_B3_BASE,EUSCI_B_I2C_Transmit_MODE);

/*启用I2C模块以启动操作*/
MAP_I2C_enableModule (EUSI_B3_BASE);

/*启用并清除中断标志*/
MAP_I2C_ClearInterruptFlag (EUSCI_B3_BASE,EUSCI_B_I2C_Transmit_INTERRUPT0 + EUSCI_B_I2C_NAK_interrupt);
/*启用主传输中断*/
MAP_I2C_enableInterrupt (EUSCI_B3_BASE,EUSCI_B_I2C_Transmit_INTERRUPT0 + EUSCI_B_I2C_NAK_interrupt);

MAP_Interrupt_enableInterrupt (INT_EUSCIB3);

以下是我的PWM初始化:

Timer_a_PWMConfig pwmConfig =  

Timer_A_CLOCKSOURCE_SMCLK,
Timer_a_CLOCKSOURCE_diver_1,
1920年
Timer_a_CAPTURECOMPare_register_3,
Timer_a_OUTPUTMODE_RESET_SET,
960
};

MAP_Timer_a_generatePWM (TIMER_A2_BASE,&pwmConfig);

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    所以我想我发现了这个问题!

    在MSP432上,我使用的PWM位于PIN 80上,该PIN具有6.6 POLS/PWM/UCB3SIMO/UCB3SDA/C 2.3 1.1
    因此,带寄存器3的计时器A2具有相同的PIN UCB3SDA。
    我正在使用的I2C是在PIN2 (WFP 10.2 ,UCB3SIMO/UCB3SDA)和P3 (WFP 10.3 ,UCB3SOMI/UCB.S.)上。

    为什么不能同时运行两个端口,即使它们有不同的端口?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Michael,

      感谢您更新线程。  6.6 0.6 上的定时器(SPOD)是主要外设设置(P6SEL = 1, P6SEL输出=0),而2.3 1.6 是次要 设置(P6SEL = 0, 0.6 1.6 = 1)。

    您应该能够同时运行这两个程序,所以让我尝试重复您所做的操作。

    此致,

    Chris

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

    Micahel,

      我无法再现此问题。  请查找所附代码,该代码取自此示例(.  )。

    e2e.ti.com/.../i2c_5F00_master_5F00_w_5F00_PWM_5F00_eUSCIB3_5F00_01.c

    如果这不能提供任何见解,请告诉我。  另外,您使用的芯片和IDE是什么版本?

    谢谢!
    Chris

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

    您好,Chris:

    我下载示例项目并将您的代码粘贴到中。

    我刷新它并调试您的代码,并注意到它被卡在这里:

    /*发送初始启动条件*/
    MAP_I2C_masterSendMultiByteStart (EUSCI_B3_BASE,TXData++);

    它不会转到下一个行代码,该代码位于:

    MAP_Interrupt_enableSleepOnIsrExit();
    MAP_PCM_GotoLPM0InterruptSafe ();

    我使用示波器测量SCL和SDA线,并注意到SCL变低,没有发送从属地址。

    SDA始终较高。

    这与我的代码中发生的问题相同。 SCL变低,之后什么也没有。 无从属地址,无寄存器值,不发送任何内容。

    您是否也可以复制它,或者您的代码是否正常工作,MSP432在将信息发送到I2C总线后进入休眠状态?

    芯片:MSP432P401RIPZR,REV C

    此致,

    Michael

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

    我发现您的代码有错误。
    将void EUSCIB0_IRQHandler(void)更改为void EUSCIB3_IRQHandler(void)
    现在,它将数据发送到I2C上。
    我将查看我的代码的更多信息,以检查其无法正常工作的原因。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    现在,我将EUSCI_B0_BASE与EUSCI_B3_BASE以及在后台运行的PWM兼容。

    在调用此函数后,I2C似乎不会进入EUSCIB3_IRQHandler函数:

    MAP_I2C_masterSendMultiByteStartWithTimeout(EUSSCI_B3_base,(uint8_t)((pointer&0xFF00)>>8),1万)

    我测量EUSCI_B3_BASE I2C线SCL和SDA:

    看起来它正在发送相同的代码。

    此处是相同的调试代码,而不是PWM在后台运行:

    我在MSP432 Launchpad RED上运行代码时也注意到同样的问题。

    我将更改您的示例并向您发送带有我的设置的.c代码。

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

    您好,Chris:

    下面是修改后的项目以及问题所在。

    我测试并可能在MSP432 Launchpad红色上重现该问题。

    我将PIN 10.2 和10.3 从10k拉至3V3,并使用示波器测量I2C线。

    e2e.ti.com/.../i2c_5F00_master_5F00_w_5F00_multibyte_2D00_master_5F00_code.c

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    发现了问题!
    我设置了MSP432时钟频率,这导致了PWM和I2C的问题:

    GPIO _setAsPeripheralModuleFunctionOutputPin (GPIO端口PJ,GPIO _PIN3 | GPIO _PIN4,GPIO主要模块功能);
    cs_setExternalClockSourceFrequency(3.2768万,48000000);</s>48000000
    PCM_setCoreVoltageLevel (PCM_VCORE1);
    Flashctl_setWaitState(flash_BANK0, 2);
    Flashctl_setWaitState(flash_Bank1,2);
    cs_startHFXT (FALSE);
    cs_initClockSignal (CS_MCLK,CS_HFXTCLK_SELECT,CS_Clock_diver_1);
    cs_initClockSignal (CS_SMCLK,CS_HFXTCLK_SELECT,CS_Clock_diver_1);

    我评论一下,它是有效的!

    如何将MSP432时钟设置为以48MHz运行?
    还是自动执行?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我不知道如何解决这个问题。

    1- 如果我注释PWM并使用CS_initClockSignal (CS_SMCLK, CS_HFXTCLK_SELECT, CS_CLock_diver_1);我得到以下信息:(这是正确的)

    2-如果我使用PWM和 CS_initClockSignal (CS_SMCLK, CS_HFXTCLK_SELECT, CS_CLock_diver_1);我得到以下信息: (这是错误的,SCL和SDA始终循环)

    3-如果我使用PWM,而不使用CS_initClockSignal (CS_SMCLK, CS_HFXTCLK_SELECT, CS_CLock_diver_1);我得到以下信息: (这是错误的,SCL和SDA循环带有一个结束)

    有什么想法吗?

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

    我会仔细检查HFXT的GPIO设置。  本示例使用引脚2和3,而不是引脚3和4。

    MAP_GPIO设置外围模块功能输出引脚(GPIO_PORT_PJ,
    GPIO _PIN3 | GPIO _PIN2,GPIO主要模块功能);

    另请参阅TRM。   

    如果HFXT出现故障,故障保护是sysosc时钟,大约为5MHz。  如果不初始化SMCLK,它将默认为DCO,我认为默认值是3MHz,如system...c文件中所指定。

    此致,

    Chris

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

    我更改了GPIO _setAsPeripheralModuleFunctionOutputPin (GPIO端口PJ,GPIO _PIN2 | GPIO _PIN3,GPIO主要模块功能);问题仍然存在。
    您能否重现此问题?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Michael,
    本周我将尝试花更多的时间来研究这个问题,但我相信我已经重复了这个问题。 在Set_Pumpe_Dulty()函数中,将dutyCycle设置为等于句点。 如果您将占空比保持在50 % (我没有尝试不同的值),则问题似乎消失了。 此外,您不应将48Mhz直接送入外围设备。 在Vcore=1时,最大外设频率为24MHz。

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

    您好,Chris:

    我现在将SMCLK更改为24MHz,但一旦PWM启动,我仍然存在I2C问题。 如果PWM在I2C总线启动之前停止,但不同时停止,则会工作。 100 % 以下的所有值对我来说都是可以的,但100 % 不是。

    另一方面,如果我在总线上连接一个I2C从属设备,并且PWM同时运行,则通信将无法正常工作:

    1-与I2C从机和PWM的通信未运行:

    2-与I2C从机和PWM同时运行的通信:

    EUSCI_B3 SDA似乎无法正常工作或未正确写入从属地址。

    我不介意使用0 % 到99 % PWM,但我真的需要它来运行,如果可能,不要阻止我的I2C通信。

    此致,

    Michael

    PS:我重现了MSP432 Launchpad RED REV 2.0 和EUSCI_B3上带有PWM的I2C从属设备上现在运行的相同问题  

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

    Michael,

      我已经浏览了您发送的示例代码,做了一些修改, 这就是我看到的

    案例1:对Set_Pumpe_Dulty的调用传递一个50 % 占空比值。

    案例2: 对Set_Pumpe_Dulty的调用传递一个99 % 占空比值。

    案例3:我将PWM更改为TA0

    对于从机,我刚才在这里使用了代码:  

    我并不真正关心从属活动的性能,只是主和PWM。  如果您认为这是不是很好,或者我错过了您要做的事情,请告诉我。   

    您是否可以确认使用另一个计时器是否正常工作?  我已附上我使用的代码。

    Chrise2e.ti.com/.../7536.i2c_5F00_master_5F00_w_5F00_multibyte_2D00_master_5F00_code.c

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

    您好,Chris:

    感谢您关注此问题。

    我在I2C_B1,I2C B2和I2C_B3上同时使用2kHz 0.1 ,没有任何问题。

    我在2.3 上成功地同时使用20kHz PWM与I2C_B1和I2C_B2,没有任何问题,但它与I2C_B3不起作用。

    我可以使用2.3 上的20kHz PWM从0到99 % dulty循环,这样它就不会给出此错误。 但一旦从属设备连接到I2C_B3总线上,它仍然不工作。

    您是否可以在I2C_B3上添加一个I2C从属设备并使用2.3 的3 W来检查此问题?

    如果这是MSP432芯片上的问题,我想我必须对PWM使用不同的计时器/PIN,但我希望这是软件问题。

    我可以使用2.1 的2.4 或2.2 来代替2.3 的302/PWM,但我必须划伤100块板来交换已经设置的引脚。

    此致,

    Michael

     

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

    您是否能够通过PWM在总线上的I2C从属设备重现此问题?
    是否有任何解决方案?

    此致,

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

    Michael,

     我确实有一个从属设备(第二个MSP432)连接到同时生成PWM的主设备。  您可以在上述波形中看到从机'ACK'。  为了简单起见,我使用的是从机的内部上拉。  我将再次测试10K上拉,看看这是否会停止PWM。

    Chris

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Michael,
    我看不出有任何立即的解决办法可以将该功能保留在相同的引脚上并保留您已构建的电路板。 这需要端口映射功能,但端口6和端口10上不可用。 您能否确认您使用的是64针封装? 我一直在测试100引脚。

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

    我也在使用100引脚封装。 我订购了100块定制主板,它们很快就会送达,并且已经全部路由。
    在我的测试中,当PWM运行时,我在I2C上没有得到任何ACK。 是否可以尝试读取或写入从寄存器?
    我必须将PWM导线从2.3 3/PWM 2.4 连接到2.1 的2.2。

    这是一个已知问题还是我是唯一一个有此问题的人?

    感谢您的帮助,

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

    Michael,

      感谢您确认包裹类型。  我不认为这个问题与从属关系有关,而是PWM和I2C之间的时间关系。  在之前的帖子中,我无法看到问题,除非我改变了占空比,但我创建了其他裸机示例,在这些示例中,我可以独立于占空比查看问题(无法从从属设备读取)。  我将介绍这些示例,以调查根本原因(并参考此讨论)。   

      这不是已知问题,我将尽可能主动地提供更新/反馈,以向您提供调查的最新信息。


    Chris

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

    Michael,

    您是否仍然有开放式问题,或者您是否能够让您的示例发挥作用?

    如果您的原始 问题已解决,请告知我们。

    此致,

    Priya

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

    您好,Priya:

    它是一项工作。 似乎MSP432的时钟出现芯片问题,这就是Chris所说的。

    因此我采取了一种变通办法,将PWM输出PIN从2.3 的2.4 2.1 连接/PWM的2.2 连接更改为的。

    使用此配置,它可以正常工作。

    您可以关闭此线程。

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

    最好能知道为什么特定配置不起作用。 这似乎很奇怪。