📄 boardini.c
字号:
#include "std.h"
#include <avr/io.h>
#include <avr/pgmspace.h>
#include <stdio.h>
#define CLOCK 4 // 4M CRY
//uart 发送一字节
int usart_putchar(char c)
{
if(c=='\n')
usart_putchar('\r');
loop_until_bit_is_set(UCSRA,UDRE);
UDR=c;
return 0;
}
//uart 接收一字节
int usart_getchar(void)
{
loop_until_bit_is_set(UCSRA,RXC);
return UDR;
}
void timer0_init(void) //CTC模式输出1KHz方波
{
TCCR0 = (1<<WGM01)|(0<<WGM00)|(0<<COM01)|(0<<COM00)|(0<<CS02)|(1<<CS01)|(1<<CS00);
//64分频,CTC模式,OC0不输出
//TOP=4000000/(2*64*1000)-1=30.25 选30 1.008KHz(0.992mS)
OCR0 = (Byte)((((Dword)CLOCK*1000000)) /(2*64*2000)-1); //设定TOP值
}
void timer2_init(void) //CTC模式输出1KHz方波
{
//TCCR2 = (1<<WGM01)|(0<<WGM00)|(0<<COM01)|(0<<COM00)|(0<<CS02)|(1<<CS01)|(1<<CS00);
TCCR2 = 0x0c;//00001100//(1<<WGM01)|(0<<WGM00)|(0<<COM01)|(0<<COM00)|(0<<CS02)|(1<<CS01)|(1<<CS00);
//64分频,CTC模式,OC0不输出
//TOP=4000000/(2*64*1000)-1=30.25 选30 1.008KHz(0.992mS)
OCR2 = (Byte)((((Dword)CLOCK*1000000)) /(2*64*2000)-1); //设定TOP值
}
void IoInit(void)
{
Byte ucSreg;
Word wI;
ucSreg = SREG;
cli();
/* IO 端口配置 */
/* I2C */
HI2C_SCL_OUTMODE;
HI2C_SDA_OUTMODE;
/* LCD port define */
LCD_CS1_OUTMODE;
LCD_CS2_OUTMODE;
LCD_RS_OUTMODE;
LCD_RST_OUTMODE;
LCD_E_OUTMODE;
LCD_RW_OUTMODE;
LCD_DB7_OUTMODE;
LCD_DB6_OUTMODE;
LCD_DB5_OUTMODE;
LCD_DB4_OUTMODE;
LCD_DB3_OUTMODE;
LCD_DB2_OUTMODE;
LCD_DB1_OUTMODE;
LCD_DB0_OUTMODE;
/* ROOM_T 温度传感器 */
ROOM_T_INMODE;
/* key board define */
KEYBOARD_INMODE;
/* TC35 define */
TC_IGT_INMODE;
// #define TC_IGT_OUTMODE CLRBIT(TC_IGT_Dir_REG,TC_IGT_Bit)
TC_CTS_INMODE;
// #define TC_CTS_OUTMODE CLRBIT(TC_CTS_Dir_REG,TC_CTS_Bit)
TC_RTS_INMODE;
// #define TC_RTS_OUTMODE CLRBIT(TC_RTS_Dir_REG,TC_RTS_Bit)
TC_RING_INMODE;
TC_TXD_OUTMODE;
TC_RXD_INMODE;
/* MUL-IN MUL-OUT define */
MULTY_OUT_OUTMODE;
MULTY_IN_INMODE;
/* UART define */
PIN_TXD_OUTMODE;
PIN_RXD_INMODE;
/* SFIOR
00000000
||||||||----------0 PSR10 NO EFFECT
|||||||-----------0 PSR2 NO EFFECT
||||||------------0 DISABLE PULL UP
|||||-------------0 ACME
||||--------------0 RESERVED
|-----------------000 ADTS
*/
SFIOR = 0x00;
/* ADC setting */
/* ADCSRA
100X0111
|||||-----------111 128 分频,确保 8M/16M晶体都可以产生 50k-200K时钟
||||------------0 ADC中断使能,关闭中断
|||-------------X 中断标志
||--------------0 关闭自动触发功能
|---------------0 开始转换
----------------1 ADC 使能
*/
ADCSRA = 0x87;
/* ADMUX
110xxxxx
||||||||----------- 通道选择
|||---------------- 0 右对齐 8bit in ADCL
||----------------- 11 3.3V Avcc电压基准
*/
ADMUX = 0x40;
TIMSK = 0x00; // disable all timer int
/* 定时器0配置 */
timer2_init();
#if 0
/* 定时器1配置 */
/*
00000000
||||||||
|||||||------- 00
|||||
|||||--------- 00
|||
| |------------00 COM B MORMAL IO
|--------------00 COM A NORMAL IO
*/
TCCR1A = 0x00;
/*
00000000
||||||---------001 CLK no div
||||
||||
||||---------- 00 WGM 13 12 NORMAL IO
|||------------0 x
||-------------0 ICES1
|--------------0 ICNC1
*/
TCCR1B = 0x01;
TCNT1 = 0x3323;
/* xx0000xx
||||------- 0
|||-------- 0
||--------- 0
|---------- 0 capture
*/
TIFR |= 0x00;
/* xx0001xx
||||-----1 enable timer int
|--------000 disable capture mode int
*/
TIMSK &= 0xc3;
TIMSK |= 0x04;
#endif
/* 定时器2配置 */
/* uart 初始化 00011000B
||||||||----- 0 TX data 8 bit
|||||||-------0 RX data 8 bit
||||||--------0 DATA LEN
|||||---------1 TX EN
||||----------1 RX EN
|||-----------0 No buffer empty interrupt
||------------0 No TX interrupt
|-------------0 No Rx interrupt
*/
UCSRB=_BV(RXEN)|_BV(TXEN);/*(1<<RXCIE)|(1<<TXCIE)|*/
UBRRL=25; //9600 baud 6MHz:38 4MHz:25
//流与设备连接
fdevopen(usart_putchar,usart_getchar,0);
TIFR = 0;
TIMSK |= 0x80;//0x02; // TIMER0 MATCH INT ENABLED
sei();
}
void BoardIni(void)
{
/* Initial MCU and other chips */
/* INITIALIZE SERIAL INTERFACE TO 2400 BAUD @12MHz */
/* 初始化标准IO流操作 */
IoInit();
#if 0
while(1)
{
vfprintf(stdout,"测试1[输入数字]:\n",0);
printf("测试1[输入数字]:\n");
}
#endif
}
SIGNAL(SIG_INTERRUPT0) //输入捕捉中断
{
g_Data.ucIntIndex = 0;
bTickGet = _TRUE_;
}
SIGNAL(SIG_INTERRUPT1) //输入捕捉中断 不知道为什么总是进入该中断,这是奇怪得事情
{
g_Data.ucIntIndex = 1;
bTickGet = _TRUE_;
}
SIGNAL(SIG_OUTPUT_COMPARE2) //输入捕捉中断
{
g_Data.ucIntIndex = 2;
bTickGet = _TRUE_;
}
SIGNAL(SIG_OVERFLOW2) //输入捕捉中断
{
g_Data.ucIntIndex = 4;
bTickGet = _TRUE_;
}
SIGNAL(SIG_OVERFLOW0) //输入捕捉中断
{
g_Data.ucIntIndex = 5;
bTickGet = _TRUE_;
}
SIGNAL(SIG_OUTPUT_COMPARE1B) //输入捕捉中断
{
g_Data.ucIntIndex = 6;
bTickGet = _TRUE_;
}
SIGNAL(SIG_OVERFLOW1) //输入捕捉中断
{
g_Data.ucIntIndex = 7;
bTickGet = _TRUE_;
}
SIGNAL(SIG_SPI) //输入捕捉中断
{
g_Data.ucIntIndex = 8;
bTickGet = _TRUE_;
}
SIGNAL(SIG_OUTPUT_COMPARE0) //输入捕捉中断
{
g_Data.ucIntIndex = 9;
bTickGet = _TRUE_;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -