main.cpp

来自「10:8的双通道音频矩阵源码」· C++ 代码 · 共 97 行

CPP
97
字号
/*==================================
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 + =
减小字号Ctrl + -
显示快捷键?