我就配置了cnt,没有中断,打算用csl_gpt库函数的getcnt来得到计数用于delay。但是getcnt里的tim1一直固定在一个值不变,求指导谢谢!
附上部分程序:
GPT_Config MyGPTConfig = {GPT_GPTCNT1_RMK(
GPT_GPTCNT10_CNT1_DEFAULT //30000 CLK cycles–10khz
),
GPT_GPTCNT2_RMK(
GPT_GPTCNT20_CNT2_DEFAULT
),
GPT_GPTCNT3_RMK(
GPT_GPTCNT30_CNT3_DEFAULT
),
GPT_GPTCNT4_RMK(
GPT_GPTCNT40_CNT4_DEFAULT
),
GPT_GPTCTL1_RMK(
GPT_GPTCTL10_TIEN_DEFAULT, //not gated
GPT_GPTCTL10_CLKSRC_DEFAULT, //=0,interal clk
GPT_GPTCTL10_ENAMODE_CONTINUOUS,GPT_GPTCTL10_PWID_DEFAULT, //only used in pulse mode
GPT_GPTCTL10_CP_CLOCK_MODE,
GPT_GPTCTL10_INVIN_DEFAULT, //CLKSRC=1 ONLY ENABLE
GPT_GPTCTL10_INVOUT_DEFAULT
),
GPT_GPTCLK0_CLKDIV_DIV1, //DIV1
GPT_GPTCTL10_TSTAT_LOW,
GPT_GPTEMU0_FREE_DEFAULT,
GPT_GPTEMU0_SOFT_DEFAULT,
GPT_GPTGCTL1_RMK(
GPT_GPTGCTL10_TDDR34_DEFAULT,
GPT_GPTGCTL10_PSC34_DEFAULT,
GPT_GPTGCTL10_TIMMODE_DEFAULT, //64bit gptim
GPT_GPTGCTL10_TIM34RS_DEFAULT, //3,4 reset
GPT_GPTGCTL10_TIM12RS_DEFAULT //1,2 reset
),
GPT_GPTPRD1_RMK(
GPT_GPTPRD10_PRD1_OF(30) //30 prd cycles
),
};
void delay2(float t);
Uint32 * tim12;
Uint32 * tim34;
float tmpt;
下面是main里的delay部分:
void delay2(float t)
{
hGPT = GPT_open(GPT_DEV0,GPT_OPEN_RESET);
GPT_init64(hGPT,0x0000,0x0288,0x0000,0x0000);
GPT_config(hGPT,&MyGPTConfig);
GPT_start12(hGPT);
while(tmpt<t)
{
GPT_getCnt (hGPT,tim34,tim12);
tmpt=(*tim34)*0.00000000333;
}
GPT_stop(hGPT);
}
Shine:
GPT_Config里的寄存器要根据CSL手册里来配,见下面的SPRU433J第297页上的structure member依次配置。http://www.ti.com/lit/ug/spru433j/spru433j.pdf