📄 main.cpp
字号:
/*==================================
G40A8-main.c
==================================*/
#include"G40A8.h"
unsigned char reg[0x30]={
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
};
unsigned char i2c=3;
/*========================================
========================================*/
void McuInit(void)
{
CLI();
PORTB=0xff;
DDRB =0xff;
PORTC=0xff;
DDRC =0xff;
PORTD=0xff;
DDRD =0xff;
//
WDR();
WDTCR=0x18;
WDTCR=0x1f;
//TWI initialisation
TWCR= 0X00; //disable twi
TWBR= 0x01; //set bit rate
TWSR= 0x00; //set prescale
TWAR= 0x10; //set slave address
TWCR= 0x45; //enable twi
MCUCR = 0x00;
GICR = 0x00;
TIMSK = 0x00; //timer interrupt sources
SEI();
}
/*========================================
========================================*/
int main()
{
DelayMs(100);
McuInit();
TWAR = 0x10 | ((PINC&0x07)<<5); //I2C Slave
LEDon();
while(1)
{
WDR();
DelayMs(10);
LEDon();
if(i2c)
{
i2c--;
SetAudioMux();
}
}
}
/*========================================
========================================*/
#pragma vector=TWI_vect
__interrupt void twi_isr(void)
{
static unsigned char Sub=0;
LEDoff();
switch(TWSR&0xf8)
{
case 0x60://收到寻址+写
case 0xa0://收到重复启动信号
TWCR|=0xc0;
break;
case 0x80://收到子地址或数据
if(!Sub)
Sub=TWDR;
else
{
reg[Sub]=TWDR;
Sub=0;
i2c=3;
}
TWCR|=0xc0;
break;
case 0xa8://收到寻址+读
TWDR=reg[Sub];
Sub=0;
TWCR|=0xc0;
break;
case 0x00:
TWCR|=0x90;
break;
}
}
/*==================================
END
==================================*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -