핀 맵핑을 위한 데이터 처리 방식 개선 #2

Open
opened 2 weeks ago by bless · 0 comments
bless commented 2 weeks ago
Collaborator

anaout.c에서 핀 맵핑을 지원하고 있습니다.

anaout.c

#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;
    }
}

이것도 괜찮은 방식입니다. 다른 방식으로 ANAOUT과 SHARP(#)과 CHECK를 한방에 처리하는 것도 괜찮은 것 같습니다.

헤더 파일에서 20개의 dut대한 ANAOUT, SHARP, CHECK를 리스트로 선언하고 그걸 가져다가 사용하는 방식입니다

static const pin_t DUT_SHARP[DUT_COUNT] = { P153, P152, P151, ... };
static const pin_t DUT_ANAOUT[DUT_COUNT] = { P64, P65, P66, ... };
static const pin_t DUT_CHECK[DUT_COUNT] = { P154, P155, P00, ... };

이걸로 바꾸는 건 어떤지 의견 달아주세요!

anaout.c에서 핀 맵핑을 지원하고 있습니다. anaout.c ```c #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; } } ``` 이것도 괜찮은 방식입니다. 다른 방식으로 ANAOUT과 SHARP(#)과 CHECK를 한방에 처리하는 것도 괜찮은 것 같습니다. 헤더 파일에서 20개의 dut대한 ANAOUT, SHARP, CHECK를 리스트로 선언하고 그걸 가져다가 사용하는 방식입니다 ```h static const pin_t DUT_SHARP[DUT_COUNT] = { P153, P152, P151, ... }; static const pin_t DUT_ANAOUT[DUT_COUNT] = { P64, P65, P66, ... }; static const pin_t DUT_CHECK[DUT_COUNT] = { P154, P155, P00, ... }; ``` 이걸로 바꾸는 건 어떤지 의견 달아주세요!
Sign in to join this conversation.
No Label
No Milestone
No project
No Assignees
1 Participants
Notifications
Due Date

No due date set.

Dependencies

This issue currently doesn't have any dependencies.

Loading…
There is no content yet.