반응형
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
// 외부 인터럽트 0        
void INT0_vect(void);    
ISR(INT0_vect)    
{
    unsigned char Temp = 0;
    
    if(Int_Edge_Flag == 0
    {
        Int_Edge_Flag = 1;
        
        EICRA = 0x03// INT0 상승엣지 11, 하강엣지 10 // ext_int_edge(0, L_TO_H);    // 상승엣지
    }
    else 
    {
        Int_Edge_Flag = 0;
        
        EICRA = 0x02// INT0 하강엣지 11, 하강엣지 10 // ext_int_edge(0, H_TO_L);    // 하강엣지
    }
                
    Time_Backup    = Timer_2_Count;    // Time_Backup = get_timer1();
    Timer_2_Count = 0;
    
    Timer_Start = 1;                 // set_timer1((unsigned int16) 0);
        
    // SMPTE 타임조절
    
          if((Time_Backup >= 15&& (Time_Backup < 30)) Temp = 0,SMPTE_FLAG = 2;
    else if((Time_Backup > 5&& (Time_Backup < 15))
    {
        SMPTE_FLAG++;
        if(SMPTE_FLAG >= 2) Temp = 1, SMPTE_FLAG = 2;
    }
        
    if(SMPTE_FLAG == 2)    
    {    
        SMPTE_FLAG = 0;        
    
        if((SMPTE_SYNC_FLAG == 0)||(SMPTE_SYNC_FLAG == 1)||(SMPTE_SYNC_FLAG == 3))
        {
                 if(Temp == 0) SMPTE_BUFF = ((SMPTE_BUFF >> 1& 0x7F);            // 0
            else if(Temp == 1) SMPTE_BUFF = ((SMPTE_BUFF >> 1| 0x80);            // 1
    
            if((SMPTE_BUFF == 0xFC&& (SMPTE_SYNC_FLAG == 0))
            {
                SMPTE_SYNC_FLAG = 1;
                SMPTE_DATA[8= SMPTE_BUFF;
            }
            else if((SMPTE_BUFF == 0xBF&& (SMPTE_SYNC_FLAG == 1))                //마지막
            {
                SMPTE_SYNC_FLAG = 2;
                Queue_Top = 0;
                Put_BitCount = 0;
                SMPTE_DATA[9= SMPTE_BUFF;
            }
        }
        else if(SMPTE_SYNC_FLAG == 2)
        {
                 if(Temp == 0) SMPTE_BUFF1 = ((SMPTE_BUFF1 >> 1& 0x7f);        // 0
            else if(Temp == 1) SMPTE_BUFF1 = ((SMPTE_BUFF1 >> 1| 0x80);        // 1
    
            Put_BitCount++;
            if(Put_BitCount == 8)
            {
                Put_BitCount = 0;
                SMPTE_DATA[Queue_Top] = SMPTE_BUFF1;
                Queue_Top++;
                if(Queue_Top == 8)
                {
                    Queue_Top = 0,
                    SMPTE_SYNC_FLAG = 3;
                }
            }
        }
    }
}    
cs


반응형

'개발모듈 > 펌웨어 모듈' 카테고리의 다른 글

- Key Control 6  (0) 2020.05.19
- 소프트 시리얼 송신 (9600 Baud)  (0) 2020.05.09
- AVR Eeprom 읽고 쓰기  (0) 2020.02.24
- Smpte Out (16Mhz 200us 타이머사용)  (0) 2019.12.16
- Delay 함수 어셈블리어 16Mhz  (0) 2019.12.16
Posted by 메가아재
,