- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
friend 们,我必须使用计时器输入(项目要求)在 61 微秒插槽中每 14 微秒采样一次输入。
我必须做 8 次才能生成一个字节。更像 UART ,但我将它用于我的硕士项目的单线总线通信。
我编写了如下代码,它给出了预期的结果,并在调试器中一次执行一条指令对其进行了测试。
下面是代码。
/*****************************************************************************
COMPARE MODE SAMPLING:
MCLK and SCLK @8MZ
The code configures P2.1 as TA1.CCI1A input.
It samples the input at P2.1 Whenever the TA1R reaches the TA1CCR1 value.
It samples input on P2.1 every 14us once in a duration of 61 us.
It then reads 8 bits one by one to read a byte.
******************************************************************************/
#include "io430g2553.h"
#define MSP_DQ BIT5
unsigned char word=0x00;
unsigned char i=0;
unsigned char temp;
void Read(void)
{
TA1CCR0 = 0x1E8; // 61 micro secs
TA1CCR1 = 0x70; // 14 micro secs
//TA0CCTL1 = CM_2 | CCIS_0 | SCS | CAP | OUTMOD_0 | CCIE;
//Keep in mind that It should not be configured as campture mode
TA1CCTL1 |= CM_2 | CCIS_0 | SCS | OUTMOD_0 | CCIE;
TA1CTL = TASSEL_2 + MC_1 + ID_0; // Register TA0CTL -> SMCLK/1, Up mode
do{
while ((TA1CCTL0 & CCIFG) == 0 ) // wait while CCIF is set
{
}
**TA1CCTL0 &= ~CCIFG; // Clear the flag** (%1%)
//TA1CTL &= ~TAIFG; // Clear the flag
i++;
} while( i<8) ;
TA1CTL = TACLR; // Stop the Timer
TA1CCTL1 = 0x00;
}
void Configure_CCI1A(void)
{
// Configuring P2.1 as TA1.CCI1A
P2OUT &= 0x00; // Clearing P1OUT
P2DIR &= ~BIT1 ; // Configuring P1.2 as input
P2SEL |= BIT1 ; // P2.1 Timer1_A, capture: CCI1A input, compare: Out1 output
P2SEL2 &= ~BIT1 ;
}
void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop WDT
BCSCTL1 = CALBC1_8MHZ;
DCOCTL = CALDCO_8MHZ;
P1OUT &= 0x00; // Clearing P1OUT
P1DIR |= BIT0 ; // Configuring P1.0 as Output
__enable_interrupt();
Configure_CCI1A();
Read();
**P1OUT ^= BIT0;** //(%2%)
while(1) {
}
}
// Timer A1 interrupt service routine
#pragma vector=TIMER1_A1_VECTOR
__interrupt void Timer1_A1 (void)
{
P1OUT ^= BIT0; // To show Read occured
word <<=1; // If x = 00000010 (binary) => x <<= 2; => x=00001000
temp=0x00;
temp=((TA1CCTL1 & SCCI)>>10);
**word = word + temp ;** //(%3%)
}
while ((TA1CCTL0 & CCIFG) == 0 ) // wait while CCIF is set
{
}
and
{
....
....
i++;
} while( i<8) ;
最佳答案
当您读取 TAIV 或在 TACCTL1 中手动清除中断标志时,中断标志会自动清除。然而,你在你的 ISR 中没有做这些事情,所以中断保持挂起,你的 CPU 继续执行你的 ISR 而没有其他代码,所以它永远没有机会退出 Read()
.
我的猜测是,通过在 ISR 中放置断点,您的开发环境会导致从 TAIV 读取并清除挂起的中断。我以前经历过这种情况,但不确定这种行为有多普遍,因为它是不可取的。
关于timer - MSP 430G2553 在比较模式下使用 Timer_A 进行采样,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11702633/
在 CCS 中对 MSP430 进行编程 利用Timer_A,ACLK和他的中断来使LED闪烁(只是现在闪烁-同样长时间断开-同时打开)。 此代码闪烁导致延迟 2 秒。存在寄存器 TA1CCR0 的最
通过 CCS、MSP430F6736A 使用嵌入式编程 需要知道,是否有任何方法可以在 UP 模式下停止定时器(即 Timer_A)。 在我的应用程序中,我在 UP 模式下使用 Timer_A 并且寄
friend 们,我必须使用计时器输入(项目要求)在 61 微秒插槽中每 14 微秒采样一次输入。 我必须做 8 次才能生成一个字节。更像 UART ,但我将它用于我的硕士项目的单线总线通信。 我编写
我是一名优秀的程序员,十分优秀!