主题中讨论的其他器件:MSPWARE
工具/软件:Code Composer Studio
大家好、德州团队、
在过去的几个月中、我不断看到 MSP430器件通过代码行启用 USB 后发生的怪异事件:
USB_setup (true、true);
有一些有趣的行为:
uint8_t USB_setup (uint8_t connectEnable、uint8_t eventsEnable) { uint8_t status; status = USB_init(); if (eventsEnable){ USB_setEnabledEvents (USB_All_USB_Events); } if (connectEnable){ if (USB_getConnectionInformation ()& USB_VBUS_Present){ if (USB_enable()=USB_sceedion){ USB_RESET(); USB_connect(); } } 返回(状态); }
由于自动时钟检测在我的情况下不起作用,因此 USB_init()包含以下行,这些行已经被我更改了:
USB_XT2Freq = USB_determineXT2Freq (); USB_XT2Freq = 24; USB_XT2PLL = USB_lookUpPll (USB_XT2Freq); uint16_t MCLKFreq = USB_determineFreq ();
现在、Determine XT2Freq 确实会破坏我的代码、因为它使用的是 TimerA1、我在其他一些手册中已经使用了该计时器 A1:
在文件夹中:USB_API/USB_common/usb.c
//计时器 A1设置-用于 XT2频率自动检测 #define TIMER_CTL TA1CTL #define TIMER_CTL_SETTINGS TASSEL_2 + MC_2 + CNTL_0 #define TIMER_CTL_CLR TACLR #define TIMER_CCTL TA1CCTL2 #define TIMER_CCTL_SETTINGS CM_1 + CCIS_1+ CAP #define TIMER_CCTL_IFG CCIFG #define TIMER_CCTL_CM CM_1 #define TIMER_CCR TA1R
其中说明了用于这些目的的计时器、可悲的是、我之前没有意识到。
只是想知道、我应该处理这个问题吗?
我当前的权变措施是重写 USB_code、这样就不需要进行自动晶振测定、因为我对晶体非常了解。
那么、我将仅为我的目的使用计时器。
我可以做的另一件事是在开始处初始化 USB 代码(我更喜欢在结束时初始化、而且我可以在不同位置的代码中打开和关闭 USB、 这样当然会再次触发 USB 并再次破坏我的外设)
在 USB 初始化之后、我将初始化我的所有 ADC 和计时器等
您会建议什么、德州仪器如何使用它们的 USB。
在所有示例中、在 USB_init 之后、我从未见过 TimerA1的用法。
感谢阅读、
祝你一切顺利。