You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

111 lines
3.3 KiB

#include "anaout.h"
// -------------------------------------------------------
// Helper macros
// -------------------------------------------------------
#define BIT(n) (1u << (n))
// -------------------------------------------------------
// ANAOUT mapping (������ ���� ����)
// ANAOUT_1 : P64 -> P6.4
// ANAOUT_2 : P65 -> P6.5
// ANAOUT_3 : P66 -> P6.6
// ANAOUT_4 : P67 -> P6.7
//
// ANAOUT_5 : P44 -> P4.4
// ANAOUT_6 : P43 -> P4.3
// ANAOUT_7 : P42 -> P4.2
// ANAOUT_8 : P41 -> P4.1
//
// ANAOUT_9 : P50 -> P5.0
// ANAOUT_10 : P51 -> P5.1
// ANAOUT_11 : P52 -> P5.2
//
// ANAOUT_12 : P60 -> P6.0
// ANAOUT_13 : P61 -> P6.1
//
// ANAOUT_14 : P72 -> P7.2
// ANAOUT_15 : P73 -> P7.3
// ANAOUT_16 : P75 -> P7.5
// ANAOUT_17 : P74 -> P7.4
// ANAOUT_18 : P76 -> P7.6
// ANAOUT_19 : P77 -> P7.7
//
// ANAOUT_20 : P130 -> P13.0
// -------------------------------------------------------
// �׷캰 ����ũ(���� AllLow/Init��)
#define P4_ANA_MASK (BIT(4) | BIT(3) | BIT(2) | BIT(1)) // P4.4~P4.1
#define P5_ANA_MASK (BIT(0) | BIT(1) | BIT(2)) // P5.0~P5.2
#define P6_ANA_MASK (BIT(7) | BIT(6) | BIT(5) | BIT(4) | BIT(1) | BIT(0)) // P6.7~P6.4 + P6.1~P6.0
#define P7_ANA_MASK (BIT(7) | BIT(6) | BIT(5) | BIT(4) | BIT(3) | BIT(2)) // P7.7~P7.2
#define P13_ANA_MASK (BIT(0)) // P13.0
void ANAOUT_AllLow(void)
{
// �ش� ��Ʈ�� LOW�� ����
P4 &= (uint8_t)~(uint8_t)P4_ANA_MASK;
P5 &= (uint8_t)~(uint8_t)P5_ANA_MASK;
P6 &= (uint8_t)~(uint8_t)P6_ANA_MASK;
P7 &= (uint8_t)~(uint8_t)P7_ANA_MASK;
P13 &= (uint8_t)~(uint8_t)P13_ANA_MASK;
}
void ANAOUT_Init(void)
{
// ���� ����: PM bit = 0 �� ����
PM4 &= (uint8_t)~(uint8_t)P4_ANA_MASK;
PM5 &= (uint8_t)~(uint8_t)P5_ANA_MASK;
PM6 &= (uint8_t)~(uint8_t)P6_ANA_MASK;
PM7 &= (uint8_t)~(uint8_t)P7_ANA_MASK;
// �ʱ� ����: ���� LOW
ANAOUT_AllLow();
}
void ANAOUT_Select(uint8_t ch)
{
if (ch < ANAOUT_CH_MIN || ch > ANAOUT_CH_MAX) {
ANAOUT_AllLow();
return;
}
ANAOUT_AllLow();
__nop(); __nop(); __nop(); __nop(); // break-before-make
// 2) ���õ� ä�θ� HIGH
switch (ch)
{
case 1: P6 |= (uint8_t)BIT(4); break; // P64
case 2: P6 |= (uint8_t)BIT(5); break; // P65
case 3: P6 |= (uint8_t)BIT(6); break; // P66
case 4: P6 |= (uint8_t)BIT(7); break; // P67
case 5: P4 |= (uint8_t)BIT(4); break; // P44
case 6: P4 |= (uint8_t)BIT(3); break; // P43
case 7: P4 |= (uint8_t)BIT(2); break; // P42
case 8: P4 |= (uint8_t)BIT(1); break; // P41
case 9: P5 |= (uint8_t)BIT(0); break; // P50
case 10: P5 |= (uint8_t)BIT(1); break; // P51
case 11: P5 |= (uint8_t)BIT(2); break; // P52
case 12: P6 |= (uint8_t)BIT(0); break; // P60
case 13: P6 |= (uint8_t)BIT(1); break; // P61
case 14: P7 |= (uint8_t)BIT(2); break; // P72
case 15: P7 |= (uint8_t)BIT(3); break; // P73
case 16: P7 |= (uint8_t)BIT(5); break; // P75
case 17: P7 |= (uint8_t)BIT(4); break; // P74
case 18: P7 |= (uint8_t)BIT(6); break; // P76
case 19: P7 |= (uint8_t)BIT(7); break; // P77
case 20: P13 |= (uint8_t)BIT(0); break; // P130
default:
// ���� ���̸� ��ü LOW ����
break;
}
}