[TI首届低功耗设计大赛]+学习型红外遥控
1、硬件
学习红外:开启一体化红外接收头电源,然后TA0。2捕获输入信号
发送红外:TA1.1产生占空比1/4的38K信号,然后与TA0。1的包络信号
2、程序
发送部分初始化
//初始化
//TA0.1 / P1.0:包络信号
//TA1.1 / P1.2:38K载波信号
GPIO_setAsPeripheralModuleFunctionOutputPin(
GPIO_PORT_P1,
GPIO_PIN0 ,
GPIO_PRIMARY_MODULE_FUNCTION
);
GPIO_setAsPeripheralModuleFunctionOutputPin(
GPIO_PORT_P1,
GPIO_PIN2 ,
GPIO_PRIMARY_MODULE_FUNCTION
);
//禁用GPIO电源默认高阻抗模式激活以前配置的端口设置
PMM_unlockLPM5(__MSP430_BASEADDRESS_PMM_FRAM__);
//--------------------------------------------------------------------
//Start timer TA1.1 / P1.2
//38kHz 1/4 duty-cycle carrier waveform length setting空比载波波形长度设置
TIMER_A_configureUpMode( TIMER_A1_BASE,
TIMER_A_CLOCKSOURCE_SMCLK,
TIMER_A_CLOCKSOURCE_DIVIDER_2, //8M/2=4M
105,//TIMER_PERIOD,//周期=时钟 / 频率
TIMER_A_TAIE_INTERRUPT_DISABLE,
TIMER_A_CCIE_CCR0_INTERRUPT_DISABLE,
TIMER_A_DO_CLEAR
);
TIMER_A_startCounter( TIMER_A1_BASE,
TIMER_A_UP_MODE
);
//Initialize compare mode to generate PWM1
TIMER_A_initCompare(TIMER_A1_BASE,
TIMER_A_CAPTURECOMPARE_REGISTER_1,
TIMER_A_CAPTURECOMPARE_INTERRUPT_DISABLE,
TIMER_A_OUTPUTMODE_RESET_SET, // output mode: reset/set 38K载波
26//DUTY_CYCLE1
);
//--------------------------------------------------------------------
//TA0.1 / P1.0
TIMER_A_configureUpMode( TIMER_A0_BASE,
TIMER_A_CLOCKSOURCE_SMCLK, //TA0CTL |= TASSEL_2
TIMER_A_CLOCKSOURCE_DIVIDER_2, //8M/2=4M
640,//TIMER_PERIOD,//周期=时钟 / 频率 TA0CCR0 = 640;
TIMER_A_TAIE_INTERRUPT_DISABLE,
TIMER_A_CCIE_CCR0_INTERRUPT_ENABLE,//TA0CCTL0 = CCIE;//中断使能
TIMER_A_DO_CLEAR //TA0CTL |= TACLR;
);
//TA0CCTL0 = CCIE;//中断使能
TIMER_A_startCounter( TIMER_A0_BASE,
TIMER_A_UP_MODE //TA0CTL |= MC_1
);
//
TIMER_A_initCompare( TIMER_A0_BASE,
TIMER_A_CAPTURECOMPARE_REGISTER_1,
TIMER_A_CAPTURECOMPARE_INTERRUPT_DISABLE,
TIMER_A_OUTPUTMODE_OUTBITVALUE, //TA0CCTL2 |= OUTMOD_0; output mode: output 输出模式 包络信号
0//the initial time of TA0 should be longer than TA1TA0的初始时间应该比TA1更长
);
接收初始化
//TA0.2 / P1.1:接收信号
// 配置 IR 输入脚
// P1DIR &= ~BIT1; //Set P1.6 as input
// P1SEL0|= BIT1; //Set P1.6 as TA0.2 input
GPIO_setAsPeripheralModuleFunctionInputPin(
GPIO_PORT_P1,
GPIO_PIN1 ,
GPIO_PRIMARY_MODULE_FUNCTION
);
//禁用GPIO电源默认高阻抗模式激活以前配置的端口设置
PMM_unlockLPM5(__MSP430_BASEADDRESS_PMM_FRAM__);
//Timer_A clock source select : SMCLK
//Continuous mode: Timer counts up to 0FFFFh
//Timer_A clear
//TA0CTL = TASSEL__SMCLK |ID__2| MC__CONTINUOUS | TACLR;
TIMER_A_configureContinuousMode( TIMER_A0_BASE,
TIMER_A_CLOCKSOURCE_SMCLK, //TA0CTL = TASSEL_2
TIMER_A_CLOCKSOURCE_DIVIDER_2, //8M/2=4M
TIMER_A_TAIE_INTERRUPT_DISABLE,
TIMER_A_DO_CLEAR //TA0CTL = TACLR
);
TIMER_A_startCounter( TIMER_A0_BASE,
TIMER_A_CONTINUOUS_MODE //TA0CTL = MC_2
);
//Capture mode : Capture on both rising and falling edges
//Synchronize capture source : Synchronous capture
//Capture/compare input select : CCIxA
//Capture mode : Capture mode
//Capture/compare interrupt enable : Interrupt enabled
// TA0CCTL2 = CM_3 | CCIS_0 | SCS | CAP | CCIE;
TIMER_A_initCapture( TIMER_A0_BASE,
TIMER_A_CAPTURECOMPARE_REGISTER_2,
TIMER_A_CAPTUREMODE_RISING_AND_FALLING_EDGE,
TIMER_A_CAPTURE_INPUTSELECT_CCIxA,
TIMER_A_CAPTURE_SYNCHRONOUS,
TIMER_A_CAPTURECOMPARE_INTERRUPT_ENABLE,
TIMER_A_OUTPUTMODE_OUTBITVALUE
);
3、界面
4、操作效果
遗憾!虽然信号产生,输入捕获都可以了,可是我最终没有完美的完成学习接收,转发!