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.

[参考译文] MSP430FR4133:Timer1_A3作为端口8.3的输入

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1323151/msp430fr4133-timer1_a3-as-input-on-port-8-3

器件型号:MSP430FR4133

您好!  

我希望你们做得好。 我目前在 MSP430上的捕获模式设置定时器与 TCS3200颜色传感器连接时遇到问题。 颜色传感器根据所捕获的颜色输出频率的方波、我会尝试在一定时间内对其进行计数。 为此、我将在引脚8.3上使用计时器作为输入、但我无法获取递增的计数变量、我不确定原因。 我不知道在配置计时器时是否缺失了某些信息、或者我的中断矢量是否不正确。 下面提供了代码:  

#包含
#包含
#包含
#include "hal_lcd.h"

无符号整型红色=0、绿色=0、蓝色=0;
无符号 int count = 0;
unsigned int white_filter = 0;


//中断

#pragma vector = TIMER0_A0_Vector
__interrupt void delay1 ()
{
P1OUT ^= BIT0;//闪烁 LED 以确认功能正常


//计时器通用中断
#pragma vector = Timer1_A1_vector
__interrupt void 增量(void)
{
开关(TA1IV){
案例0x08://Capture/compare 中断2
计数++;
中断;
默认值:
中断;




void displayIntegerOnLCD(int value){
char str[20];//假设整数最多为5位数
sprintf (str、"%d"、value);//将整数转换为字符串

displayScrollText (str);//使用 displayScrollText 函数在 LCD 上显示字符串


void init_timers()
{

//将计时器 A1分配给引脚8.3作为计数器
TA1CCTL2 |= CM_1;//在时钟的上升沿进行捕获
TA1CCTL2 |= CCIS_0;//选择引脚8.3
TA1CCTL2 |= SCS;//同步捕捉
TA1CCTL2 |= cap;//捕获模式
TA1CCTL2 |= CCIE;//启用中断
TA1CTL |= TASSEL_2 | MC_2 | TACLR;// SMCLK、连续模式、清除计时器


//计时器 A0 -已确认正常工作
TA0CTL |= TACLR;//重置计时器
TA0CTL |= tassel_1;// SMCLK
TA0CTL |= MC_1;//计时器开始计数到 TA0CCR0
TA0CCTL0 = CCIE;//启用中断
TA0CCR0 |= 50000 - 1 ;


空 init_ColorSensor()

P1DIR = 0x31;//端口1.4和1.5作为 S0和 S1的输出

P2DIR = 0xA0;//端口2.5和2.7分别作为 S2和 S3的输出

P8DIR =~0x08;//端口8.3设置为 OUT 的输入,以连接到计时器 TA0.1
P8SEL0 = 0x08;//端口8.3选择作为主要功能(计时器 A0)

P1OUT = 0x30;// 1.4高电平和1.5低电平:输出频率缩放= 100%
P2OUT = 0x00;//最初采用红色滤波器


int main (void){

WDTCTL = WDTPW + WDTHOLD;//停止 WDT


P1OUT |= 0x00;


PMM_unlockLPM5 ();

init_timers();
init_ColorSensor();

__enable_interrupt ();

_ bis_SR_register (GIE);//使计时器中断正常工作

init_lcd ();//初始化 LCD

ClearLCD();

while (1){


displayIntegerOnLCD(计数);




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

    案例0x08://Capture/compare interrupt 2

    根据用户指南(SLAU445I)表13-8、这是针对 TAxCCR4事件的。 请尝试改用:

    案例0x04://Capture/compare interrupt 2

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

    非常感谢您。 感谢您的服务。