2016-12-24 47 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