#include "gatectrl.h" static uint8_t s_ch = 1; #define PORT_BIT_SETCLR(PORT, MASK, ON) \ do { \ if (ON) { (PORT) |= (uint8_t)(MASK); } \ else { (PORT) &= (uint8_t)~(MASK); } \ } while (0) void Gate_SetByNum(uint8_t ch, uint8_t hash_on, uint8_t anaout_on, uint8_t check_on) { switch (ch) { case 1: /* HASH P15.3, ANAOUT P6.4, CHECK P15.4 */ PORT_BIT_SETCLR(P15, 0x08, hash_on); // P15.3 PORT_BIT_SETCLR(P6, 0x10, anaout_on); // P6.4 PORT_BIT_SETCLR(P15, 0x10, check_on); // P15.4 break; case 2: /* P15.2, P6.5, P15.5 */ PORT_BIT_SETCLR(P15, 0x04, hash_on); // P15.2 PORT_BIT_SETCLR(P6, 0x20, anaout_on); // P6.5 PORT_BIT_SETCLR(P15, 0x20, check_on); // P15.5 break; case 3: /* P15.1, P6.6, P0.0 */ PORT_BIT_SETCLR(P15, 0x02, hash_on); // P15.1 PORT_BIT_SETCLR(P6, 0x40, anaout_on); // P6.6 PORT_BIT_SETCLR(P0, 0x01, check_on); // P0.0 break; case 4: /* P15.0, P6.7, P15.6 */ PORT_BIT_SETCLR(P15, 0x01, hash_on); // P15.0 PORT_BIT_SETCLR(P6, 0x80, anaout_on); // P6.7 PORT_BIT_SETCLR(P15, 0x40, check_on); // P15.6 break; case 5: /* P12.0, P4.4, P3.0 */ PORT_BIT_SETCLR(P12, 0x01, hash_on); // P12.0 PORT_BIT_SETCLR(P4, 0x10, anaout_on); // P4.4 PORT_BIT_SETCLR(P3, 0x01, check_on); // P3.0 break; case 6: /* P12.5, P4.3, P3.2 */ PORT_BIT_SETCLR(P12, 0x20, hash_on); // P12.5 PORT_BIT_SETCLR(P4, 0x08, anaout_on); // P4.3 PORT_BIT_SETCLR(P3, 0x04, check_on); // P3.2 break; case 7: /* P0.1, P4.2, P0.3 */ PORT_BIT_SETCLR(P0, 0x02, hash_on); // P0.1 PORT_BIT_SETCLR(P4, 0x04, anaout_on); // P4.2 PORT_BIT_SETCLR(P0, 0x08, check_on); // P0.3 break; case 8: /* P12.6, P4.1, P7.0 */ PORT_BIT_SETCLR(P12, 0x40, hash_on); // P12.6 PORT_BIT_SETCLR(P4, 0x02, anaout_on); // P4.1 PORT_BIT_SETCLR(P7, 0x01, check_on); // P7.0 break; case 9: /* P12.7, P5.0, P7.1 */ PORT_BIT_SETCLR(P12, 0x80, hash_on); // P12.7 PORT_BIT_SETCLR(P5, 0x01, anaout_on); // P5.0 PORT_BIT_SETCLR(P7, 0x02, check_on); // P7.1 break; case 10: /* P0.2, P5.1, P10.4 */ PORT_BIT_SETCLR(P0, 0x04, hash_on); // P0.2 PORT_BIT_SETCLR(P5, 0x02, anaout_on); // P5.1 PORT_BIT_SETCLR(P10, 0x10, check_on); // P10.4 break; case 11: /* P10.3, P5.2, P10.5 */ PORT_BIT_SETCLR(P10, 0x08, hash_on); // P10.3 PORT_BIT_SETCLR(P5, 0x04, anaout_on); // P5.2 PORT_BIT_SETCLR(P10, 0x20, check_on); // P10.5 break; case 12: /* P10.2, P6.0, P10.6 */ PORT_BIT_SETCLR(P10, 0x04, hash_on); // P10.2 PORT_BIT_SETCLR(P6, 0x01, anaout_on); // P6.0 PORT_BIT_SETCLR(P10, 0x40, check_on); // P10.6 break; case 13: /* P10.1, P6.1, P10.7 */ PORT_BIT_SETCLR(P10, 0x02, hash_on); // P10.1 PORT_BIT_SETCLR(P6, 0x02, anaout_on); // P6.1 PORT_BIT_SETCLR(P10, 0x80, check_on); // P10.7 break; case 14: /* P10.0, P7.2, P5.7 */ PORT_BIT_SETCLR(P10, 0x01, hash_on); // P10.0 PORT_BIT_SETCLR(P7, 0x04, anaout_on); // P7.2 PORT_BIT_SETCLR(P5, 0x80, check_on); // P5.7 break; case 15: /* P9.7, P7.3, P5.6 */ PORT_BIT_SETCLR(P9, 0x80, hash_on); // P9.7 PORT_BIT_SETCLR(P7, 0x08, anaout_on); // P7.3 PORT_BIT_SETCLR(P5, 0x40, check_on); // P5.6 break; case 16: /* P9.6, P7.5, P5.5 */ PORT_BIT_SETCLR(P9, 0x40, hash_on); // P9.6 PORT_BIT_SETCLR(P7, 0x20, anaout_on); // P7.5 PORT_BIT_SETCLR(P5, 0x20, check_on); // P5.5 break; case 17: /* P9.5, P7.4, P5.4 */ PORT_BIT_SETCLR(P9, 0x20, hash_on); // P9.5 PORT_BIT_SETCLR(P7, 0x10, anaout_on); // P7.4 PORT_BIT_SETCLR(P5, 0x10, check_on); // P5.4 break; case 18: /* P9.4, P7.6, P1.0 */ PORT_BIT_SETCLR(P9, 0x10, hash_on); // P9.4 PORT_BIT_SETCLR(P7, 0x40, anaout_on); // P7.6 PORT_BIT_SETCLR(P1, 0x01, check_on); // P1.0 break; case 19: /* P9.3, P7.7, P1.3 */ PORT_BIT_SETCLR(P9, 0x08, hash_on); // P9.3 PORT_BIT_SETCLR(P7, 0x80, anaout_on); // P7.7 PORT_BIT_SETCLR(P1, 0x08, check_on); // P1.3 break; case 20: /* P9.2, P13.0, P1.4 */ PORT_BIT_SETCLR(P9, 0x04, hash_on); // P9.2 PORT_BIT_SETCLR(P13, 0x01, anaout_on); // P13.0 PORT_BIT_SETCLR(P1, 0x10, check_on); // P1.4 break; default: break; } } void Cal_Init(void) { uint8_t i; // P4.7 = 0, P15.7 = 0 (´Ù¸¥ ºñÆ® º¸Á¸!) PORT_BIT_SETCLR(P4, 0x80, 0); PORT_BIT_SETCLR(P15, 0x80, 0); for (i = 1; i <= 20; i++) { Gate_SetByNum(i, 0, 0, 1); // hash=0, anaout=0, check=1 } } void Eol_Init(void) { uint8_t i; // P4.7 = 1, P15.7 = 0 (´Ù¸¥ ºñÆ® º¸Á¸!) PORT_BIT_SETCLR(P4, 0x80, 1); PORT_BIT_SETCLR(P15, 0x80, 0); for (i = 1; i <= 20; i++) { Gate_SetByNum(i, 0, 0, 1); // hash=0, anaout=0, check=1 } } void GateCtrl_SelectChannel(uint8_t ch) { if (ch < 1 || ch > 20) return; s_ch = ch; }