📄 init.c
字号:
//ICC-AVR application builder : 2006-11-14 8:40:20
// Target : M16
// Crystal: 8.0000Mhz
#include <iom16v.h>
#include <macros.h>
void port_init(void)
{
PORTB = 0xEF;
DDRB = 0xbb;//10111011;
PORTC = 0xFF;
DDRC = 0xfe;
PORTD = 0xFe;
DDRD = 0xfa;//0x02;
}
//--------------------------------------------------------
//--------------------------------------------------------
//--------------------------------------------------------
//--------------------------------------------------------
//Watchdog initialisation
// prescale: 16K cycles
void watchdog_init(void)
{
WDR(); //this prevents a timout on enabling
WDTCR = 0x08; //WATCHDOG ENABLED - dont forget to issue WDRs
}
//--------------------------------------------------------
//--------------------------------------------------------
//--------------------------------------------------------
//--------------------------------------------------------
void SPI_MasterInit(void)
{
SPI_PORT |= (1<<nrfCE);
_NOP();_NOP();_NOP();
SPI_DDR |= (1<<SpiMosi)|(1<<SpiSck)|(1<<nrfCE); //设置MOSI、SS 和SCK 为输出
SPI_DDR &= ~(1<<SpiMiso); //设置MISO 为输入
SPCR = (1<<SPE)|(1<<MSTR)|(1<<SPR0); //使能SPI 主机模式,设置时钟速率为fck/16=500kHz,MSB first
}
//--------------------------------------------------------
//--------------------------------------------------------
//--------------------------------------------------------
//--------------------------------------------------------
//call this routine to initialise all peripherals
void InitInterrupt(void)
{
UBRRH = 0x80;
UCSRC=0x86;
UBRRL=0xcf;
UCSRC=0x86; //定义串口 8位数据位置 异步通讯
UBRRL=0xcf; //定义波特率 在8M时钟情况下 0xcf 2400波特
//4800波特 0x67
UCSRA=0x20; //UCSRA:USART Control and Status A 清除接收寄存器
UCSRB=0xd8; //UCSRB:USART Control and Status B
//允许接收及发送中断,接收使能 发送使能
UBRRH = 0x80;
UCSRC=0x86;
UBRRL=0xcf;
TCCR0 = 0x00; //定时器0溢出值初始化 0.5豪秒中断一次
TCNT0 = 0x82;
TCCR0 = 0x03; //定义时钟32分频
TCCR1B = 0x00; //定时器1溢出值初始化 2豪秒中断一次
TCNT1H = 0xf8;
TCNT1L = 0x2f;
TCCR1A = 0x00;
TCCR1B = 0x02; //定义时钟8分频
MCUCR = 0x02;
GICR=0x40; //不允许INT1 INT2 ,允许INT0
TIMSK=0x05; //TIMER0 及 TIMER1溢出中断使能
}
//--------------------------------------------------------
//--------------------------------------------------------
//--------------------------------------------------------
//--------------------------------------------------------
void init_devices(void)
{
//stop errant interrupts until set up
CLI(); //disable all interrupts
port_init();
watchdog_init();
InitInterrupt();
MCUCR = 0x02;
// GICR = 0x00;
TIMSK = 0x05; //timer interrupt sources
SEI(); //re-enable interrupts
//all peripherals are now initialised
}
//--------------------------------------------------------
//--------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -