📄 g2300.c
字号:
/*===============================
G2300.c
===============================*/
#include "g2300.h"
unsigned char standard=PAL;
unsigned char fvideo=ON;
unsigned char serial=0;
unsigned char debug=OFF;
unsigned char sbuf[16];
unsigned char const RWOK[]="Rw_ok\n";
unsigned char const RWERROR[]="Rw_error\n";
/*===============================
===============================*/
void McuInit(void)
{
CLI();
PORTB=0xdf;
DDRB =0x02;
PORTC=0xff;
DDRC =0x02;
PORTD=0xff;
DDRD =0x20;
//
WDR();
WDTCR=0x18;
WDTCR=0x1f;
//TIMER0 initialisation - prescale:1024
// desired value: 50mSec
// actual value: 49.920mSec (0.2%)
TCCR0 = 0x00; //stop
TCNT0 = 0x3D; //set count
TCCR0 = 0x05; //start timer
//TWI initialisation
// bit rate:12 100kHz
TWCR= 0X00; //disable twi
TWBR= 0x0C; //set bit rate
TWSR= 0x00; //set prescale
TWAR= 0x02; //set slave address
TWCR= 0x04; //enable twi
//UART0 initialisation
// desired baud rate: 19200
// actual: baud rate:19231 (0.2%)
// char size: 8 bit
// parity: Disabled
UCSRB = 0x00; //disable while setting baud rate
UCSRA = 0x00;
UCSRC = 0x86;
UBRRL = 0x0C; //set baud rate lo
UBRRH = 0x00; //set baud rate hi
UCSRB = 0x98;
MCUCR = 0x00;
GICR = 0x00;
TIMSK = 0x01; //timer interrupt sources
SEI();
}
/*===============================
===============================*/
void main (void)
{
unsigned char Data,Sub;
unsigned char state=0,old_state=1;
McuInit();
DelayMs(100);
ResetDevice();
SetPvx521();
LEDon();
SetTvp5150();
while(1)
{
WDR();
if(!debug)
{
if(!(TVP5150read(0x88)&0x02) && !(TVP5150read(0x88)&0x02))
{
fvideo=0;
}
else
{
if(TVP5150read(0x88)&0x20)
standard=PAL;
else
standard=NTSC;
fvideo=1;
}
state=TVP5150read(0x88);
if(old_state!=state)
{
old_state=state;
SetTvp5150();
}
SetPvx521();
}
/**Uart command**/
if(serial)
{
serial=0;
if(sbuf[0]=='w' && sbuf[1]=='w' && sbuf[2]=='2' && sbuf[3]=='e' && sbuf[4] && sbuf[5] && sbuf[6] && sbuf[7])
{
debug=ON;
Sub = (CharToValue(sbuf[4])<<4)|CharToValue(sbuf[5]);
Data = (CharToValue(sbuf[6])<<4)|CharToValue(sbuf[7]);
if(PVX521write(Sub,Data))
UartTxdStr(RWOK);
else
UartTxdStr(RWERROR);
}
else if(sbuf[0]=='r' && sbuf[1]=='r' && sbuf[2]=='2' && sbuf[3]=='e' && sbuf[4] && sbuf[5])
{
Sub = (CharToValue(sbuf[4])<<4)|CharToValue(sbuf[5]);
Data = PVX521read(Sub);
UartTxdHexValue(Data);
}
else if(sbuf[0]=='w' && sbuf[1]=='w' && sbuf[2]=='b' && sbuf[3]=='a' && sbuf[4] && sbuf[5] && sbuf[6] && sbuf[7])
{
debug=ON;
Sub = (CharToValue(sbuf[4])<<4)|CharToValue(sbuf[5]);
Data = (CharToValue(sbuf[6])<<4)|CharToValue(sbuf[7]);
if(TVP5150write(Sub,Data))
UartTxdStr(RWOK);
else
UartTxdStr(RWERROR);
}
else if(sbuf[0]=='r' && sbuf[1]=='r' && sbuf[2]=='b' && sbuf[3]=='a' && sbuf[4] && sbuf[5])
{
Sub = (CharToValue(sbuf[4])<<4)|CharToValue(sbuf[5]);
Data = TVP5150read(Sub);
UartTxdHexValue(Data);
}
sbuf[0]=sbuf[1]=sbuf[2]=sbuf[3]=sbuf[4]=0;
}
}
}
/*===============================
===============================*/
#pragma vector=TIMER0_OVF_vect //50mS
__interrupt void timer0_ovf_isr(void)
{
// unsigned char static count=0;
TCNT0 = 0x3D; //reload counter value
// LEDblink();
}
/*================================
================================*/
#pragma vector=USART_RXC_vect
__interrupt void uart0_rx_isr(void)
{
//uart has received a character in UDR
static unsigned char ptr=0;
static unsigned char tmp=0;
tmp=UDR;
if(tmp!='\n')
{
sbuf[ptr]=tmp;
if(ptr<15)
ptr++;
}
else
{
serial=ptr;
ptr=0;
}
// UartTxd(tmp);
}
/*===============================
END
===============================*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -