|
#include "avr_compiler.h"
#include <util/delay.h>
#include "clksys_driver.h"
#include "TC_driver.h"
#define uchar unsigned char
#define uint unsigned int
void sysclk_initial(void)
{
/* Enable internal 32 MHz ring oscillator and wait until it's
* stable. Divide clock by two with the prescaler C and set the 16M
* 32 MHz ring oscillator as the main clock source.
*/
CLKSYS_PLL_Config( OSC_PLLSRC_RC2M_gc, 16 );
CLKSYS_Enable( OSC_PLLEN_bm );
CLKSYS_Prescalers_Config( CLK_PSADIV_1_gc, CLK_PSBCDIV_1_1_gc );
do {} while ( CLKSYS_IsReady( OSC_PLLRDY_bm ) == 0 );
CLKSYS_Main_ClockSource_Select( CLK_SCLKSEL_PLL_gc );
}
uint16_t period_ticks = 31250; // 31250*1024/32M = 1 second period.
void T0_init()//定时器0 定时1秒
{
TCD0.PER = 31250;//设定对比值
TCD0.CTRLA = TC_CLKSEL_DIV1024_gc;;//配置时钟分频
TCD0.INTCTRLA = TC_OVFINTLVL_MED_gc;
TCD0.INTCTRLA=(TCD0.INTCTRLA&~TC0_OVFINTLVL_gm)|TC_OVFINTLVL_MED_gc;//中断级别
PMIC_CTRL |= PMIC_MEDLVLEN_bm|PMIC_HILVLEN_bm|PMIC_LOLVLEN_bm;//PIMC级别选择与上面中断相对应
}
int main( void )
{
PORTC.DIR=0x07;//方向输出
PORTB.DIR=0xFF;
sysclk_initial();
T0_init();
sei();
while (1);
}
ISR(TCD0_OVF_vect)
{
PORTC_OUTTGL = 0x01;
}
老师您好 我用的是ATxmega128的板子 现在 我实现定时功能了 但是 我不知的怎么去计数 我知道计数的三要素 计数端口设置 计数初值设置 计数上升还是下降设置,我不知道怎么设置这几个参数 您是AVR的高手 希望您能帮我一下 谢谢您 |
|