/* cmanalog.c L. Stewart September 24, 1982 9:52 AM L. Stewart December 3, 1982 2:44 PM */ #include "Env.h" #include "Lark.h" #include "LarkSlave.h" /* pioml */ extern PIOOn(); extern PIOOff(); extern SetPIO(); extern GetPIO(); extern SetCodec(); /* runtime */ extern StoreW(); extern OutByte(); #define SwData 0x0001 #define SwStb0 0x0010 #define ipioa 0 #define ipiob 1 #define ipioc 2 #define iapioa 3 #define iapiob 4 #define iapioc 5 InitAnalog() { int row, col; /* set up apio */ OutByte(apioctl, 0x0088); SetPIO(0x00c0, iapioa); /* both relays OFF */ SetPIO(0x000c, iapioc); /* no ring or sidetone */ SetPIO(0x0000, iapiob); SetPIO(0x00e1, ipioa); /* LED Off */ SetPIO(0x0030, ipioc); /* both relays off */ SetCodec(0x0c); /* timeslot 13 */ /* open all crossbar switches */ XbarClear(); ResetAnalogInt(); ResetEncInt(); StoreW(InTab00, In1Gain); StoreW(InTab00, In2Gain); StoreW(OutTab00, OutGain); }; static ClearXbar(row, col) int row, col; { PIOOff(SwData, iapioc); xbarcom(row, col); }; SetXbar(row, col) int row, col; { PIOOn(SwData, iapioc); xbarcom(row, col); }; static xbarcom(row, col) int row, col; { int data, clock, shift; data = (col & 3) | ((row & 3) << 2); if (row < 4) shift = 0; else shift = 1; if (col >= 4) shift += 2; clock = (SwStb0 << shift); SetPIO(data, iapiob); SetPIO(clock + data, iapiob); SetPIO(data, iapiob); }; static ResetAnalogInt() { PIOOff(0x0080, ipioa); PIOOn(0x0080, ipioa); }; static ResetEncInt() { PIOOff(0x0001, ipioa); PIOOn(0x0001, ipioa); }; /* 0 means default, 1 means O3I1, 2 means O2I2 */ StartSlave(prog, length) int prog, length; { int i; StoreW(prog, CodeLoc); StoreW(length, CodeLen); PIOOn(0x20, ipioa); for (i=0; i< 20; i+= 1); OutByte(dmamode, 0xc0); OutByte(dmasmsk, 0x00); PIOOff(0x20, ipioa); for (i=0; i< 20; i+= 1); if (prog != 0) { PIOOff(0x10, ipioa); PIOOn(0x10, ipioa); PIOOff(0x10, ipioa); }; }; static XbarClear() { int row, col; for (row = 0; row < 8; row += 1) { for (col = 0; col < 8; col += 1) ClearXbar(row, col); }; };