2016-12-24 173 views
1

您好,我最近一直在使用Tm4c123gh6pm进行编码,而且我已经遇到了一部分我想使用边缘计时模式的地方,现在我还没有去参加Tivaware api的传统寄存器级别的比赛,以下数据表和我面临这个问题 我想知道哪个引脚使用的定时器正在等待上升沿来,所以它移动当前的计时器值? 我检查了数据表,我可以找到的是,计时器0是PB6和PF0现在我尝试PB6和它不起作用,但是,即使是正确的做法? 这些是微控制器的定时器等待上升沿移动当前定时器值的正确引脚吗? 这里是我的代码示例,请注意,这只是一个测试代码即时通讯尝试它不是一个最终的代码我所做的是复制数据表中的初始化部分为我想要的定时器模式,并按照它一步一步 this代码会使计数器开始从0xFF向下运行,但是当我在PB6上放置一个'高'信号(即3.3伏)时,没有任何东西移动到GPTMTnR寄存器。 我只是想知道如果有什么我做错了,我没有注意到?Tiva C边缘计时模式

#include "tm4c123gh6pm.h" 

void Timer0Init(void); 

int main(void) 
{ 
    int i=0; 
    Timer0Init(); 
    while(1){ 
     for(i=0;i<100000;i++){ 
     } 
    } 
    return 0; 
} 

void Timer0Init(void) 
{ 
    //initialize PORT B 
    volatile unsigned long delay; 
    SYSCTL_RCGC2_R |= 0x00000002;  // 1) B clock 
    delay = SYSCTL_RCGC2_R;   // delay to allow clock to stabilize  
    GPIO_PORTB_AMSEL_R &= 0x00;  // 2) disable analog function 
    GPIO_PORTB_PCTL_R &= 0x00000000; // 3) GPIO clear bit PCTL 
    GPIO_PORTB_DIR_R &= 0x00;   // 4.2) PB all input 
    GPIO_PORTB_AFSEL_R &= 0x40;  // 5) no alternate function 
    GPIO_PORTB_DEN_R |= 0xFF;   // 7) enable digital pins PF4-PF1 
    GPIO_PORTB_PCTL_R = 7; 
    //timer clock 
    SYSCTL_RCGCTIMER_R |=0x01; 
    delay = SYSCTL_RCGCTIMER_R; 
//1. Ensure the timer is disabled (the TnEN bit is cleared) before making any changes. 
    TIMER0_CTL_R &= 0xFE; 
//2. Write the GPTM Configuration (GPTMCFG) register with a value of 0x0000.0004. 
    TIMER0_CFG_R= 0x00000004; 
//3. In the GPTM Timer Mode (GPTMTnMR) register, write the TnCMR field to 0x1 and the TnMR field to 0x3. 
    TIMER0_TAMR_R= TIMER0_TAMR_R | 0x007; 
//4. Configure the type of event that the timer captures by writing the TnEVENT field of the GPTM Control (GPTMCTL) register. 
    TIMER0_CTL_R = TIMER0_CTL_R & 0xFFFFFFF3; 
//5. If a prescaler is to be used, write the prescale value to the GPTM Timer n Prescale Register (GPTMTnPR). 
    //no prescaler for now 
//6. Load the timer start value into the GPTM Timer n Interval Load (GPTMTnILR) register. 
    TIMER0_TAILR_R = 0xFF; 
//7. If interrupts are required, set the CnEIM bit in the GPTM Interrupt Mask (GPTMIMR) register. 
//no interrupts required  
//8. Set the TnEN bit in the GPTM Control (GPTMCTL) register to enable the timer and start counting. 
    TIMER0_CTL_R= TIMER0_CTL_R & 0x00000001; 
    TIMER0_CTL_R |= 0x01; 
//9. Poll the CnERIS bit in the GPTMRIS register or wait for the interrupt to be generated (if enabled). In both cases, 
//the status flags are cleared by writing a 1 to the CnECINT bit of the GPTM Interrupt Clear (GPTMICR) register. 
//The time at which the event happened can be obtained by reading the GPTM Timer n (GPTMTnR) register. 

/*In Input Edge Timing mode, the timer continues running after an edge event has been detected, 
but the timer interval can be changed at any time by writing the GPTMTnILR register. The change 
takes effect at the next cycle after the write.*/ 
} 

回答

0

有一个与我的PORTB初始化一个问题,我使用tivaware的那部分,现在工作完全罚款将高上PB6它传递当前定时器值到其他注册 也注意到,计数的时定时器计数到TAIL_R寄存器初始化的值,同样如果你想重置定时器,你需要写入TAV_R寄存器中的定时器开始的值 Best Of Luck everyone