
-
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


목차
1. 서 론2.
2. T-DMB 이론 ··················
3. DMB 수신보드 및 PC 연결 구성 ······
4. ARM 프로세서의 General Purpose I/O pin ···········
5. BaseBand 칩 제어 ·····················
6. Tuner 칩 제어 ···············
7. BaseBand 칩과의 통신 ·············
8. T-DMB 수신을 위한 칩셋 제어 ··········
9. FIC 데이터 구조 및 분석 ··············
10. 결론 및 고찰 ···················
2. T-DMB 이론 ··················
3. DMB 수신보드 및 PC 연결 구성 ······
4. ARM 프로세서의 General Purpose I/O pin ···········
5. BaseBand 칩 제어 ·····················
6. Tuner 칩 제어 ···············
7. BaseBand 칩과의 통신 ·············
8. T-DMB 수신을 위한 칩셋 제어 ··········
9. FIC 데이터 구조 및 분석 ··············
10. 결론 및 고찰 ···················
본문내용
DATA[SER_COM_SIZE], Copy_Size) ;
}
break ;
case 2: //FIG0/2=================
while( Copy_Size != 0 ) {
if(P_D == 0) {
NUM_OF_SER_COM = FIG_DATA[2] & 0x0F ;
SER_COM_SIZE = 3 + (NUM_OF_SER_COM * 2) ;
}
else if(P_D == 1) {
NUM_OF_SER_COM = FIG_DATA[4] & 0x0F ;
SER_COM_SIZE = 5 + (NUM_OF_SER_COM * 2) ;
}
Copy_Size -= SER_COM_SIZE ;
FIG_TYPE0_EXT2_SAVE_FUN(FIG_DATA, FIG_EXTENSION, P_D, SER_COM_SIZE) ;memcpy(FIG_DATA, &FIG_DATA[SER_COM_SIZE], Copy_Size) ;
}
break ;
default:
break ;
}
}
void FIG_TYPE1_FUN(INT8U * FIG_DATA, INT8U FIG_EXTENSION, INT8U LENGTH) {
INT32S i = 0 ;
printf("\nData field : ") ;
for(i = 0; i < LENGTH ;i++) {
printf("%02x ", FIG_DATA[i]) ;
}
printf("\n") ;
switch(FIG_EXTENSION) {
case 0: //FIG1/0=================
FIG_TYPE1_EXT0_SAVE_FUN (FIG_DATA, FIG_EXTENSION, LENGTH) ;
break ;
case 1: //FIG1/1=================
FIG_TYPE1_EXT1_SAVE_FUN (FIG_DATA, FIG_EXTENSION, LENGTH) ;
break ;
case 2: //FIG1/2=================
FIG_TYPE1_EXT2_SAVE_FUN (FIG_DATA, FIG_EXTENSION, LENGTH) ;
break ;
case 3: //FIG1/3=================
FIG_TYPE1_EXT3_SAVE_FUN (FIG_DATA, FIG_EXTENSION, LENGTH) ;
break ;
case 4: //FIG1/4=================
FIG_TYPE1_EXT4_SAVE_FUN (FIG_DATA, FIG_EXTENSION, LENGTH) ;
break ;
case 5: //FIG1/5=================
FIG_TYPE1_EXT5_SAVE_FUN (FIG_DATA, FIG_EXTENSION, LENGTH) ;
break ;
default:
break ;
}
}
void FIG_TYPE5_FUN(INT8U * FIG_DATA, INT8U FIG_EXTENSION, INT8U LENGTH) {
INT32S i = 0;
printf(" Data field : ") ;
for(i = 0; i < LENGTH; i++) {
printf("%02x ", FIG_DATA[i]) ;
}
printf("\n") ;
}
void FIG_TYPE6_FUN(INT8U * FIG_DATA, INT8U FIG_EXTENSION, INT8U LENGTH) {
INT32S i = 0;
printf(" Data field : ") ;
for(i = 0; i < LENGTH; i++) {
printf("%02x ", FIG_DATA[i]) ;
}
printf("\n") ;
}
[소스 28]
[소스 28]에서 main()함수는 크게 두 개의 for 문으로 이루어져 있다. 첫 번째 for문은 파일로부터 일정 크기(30byte)만큼 읽어 들이는 것을 반복한다. 두 번째 for문은 파일로부터 읽어 들인 데이터(FIB : 30Byte)에 포함될 수 있는 FIG의 경우의 수만큼 반복하면서 하나의 FIB에 포함되는 모든 FIG를 분석한다.
두 번째 for 문은 if ~ else문으로 다시 구성된다. 이 if ~ else 문은 읽어 들인 데이터(FIB : 30Byte)가 Padding 인지 아닌지를 구분한다. 만약 읽어 들인 하나의 FIB가 ①Padding이 아닌 경우 FIG TYPE과 FIG LENGTH를 구하게 되고 ②Padding인 경우 하나의 FIB분석이 완료된다. ①의 경우는 FIG LENGTH가 ‘0’보다 큰지 확인하는 if 문으로 다시 구성되고 이 if문은 FIG TYPE을 구분하기 위한 switch 문으로 구성된다.
switch 문의 각 case 문은 각 FIG TYPE을 분석하기 위한 EXTENSION 등의 파라미터를 구하고 해당하는 FIG TYPE 분석함수나 저장함수를 호출한다.
이렇게 switch문까지 실행하면 하나의 FIG 분석이 완료된다. Switch 문 다음에 있는 if ~ else 문은 하나의 FIB에 포함된 하나의 FIG 분석이 끝나고 FIB의 분석이 완료되었는가를 검토하는 부분이다. 만약 이 if ~ else 문에서 ③조건을 만족할 경우 (하나의 FIB에 하나의 FIG 만이 포함되어 있을 경우) 하나의 FIB 분석이 완료된다. ④조건을 만족하지 않을 경우 (하나의 FIB에 여러 개의 FIG가 포함되어 있을 경우) 다음 FIG 데이터를 분석하기 위해 FIB 데이터에서 분석을 마친 FIG를 제외하고 FIB 데이터를 새로 저장한다.
switch문에서 호출되는 FIG_TYPE0_FUN(), FIG_TYPE1-FUN() 등의 함수들은 각 FIG TYPE에 따른 Data Field를 출력하는 함수이다.
10. 결론 및 고찰
처음에 DMB에 대한 기본 지식이 없어서 조원 모두에게 힘든 점이 많았다. 매번 실습을 통해 공부 하였지만 어려운 부분이 많아 잘 풀리지 않는 부분도 있었다. 하지만 실습시간에 조교의 도움을 통해 많이 배우고 실습을 무사히 끝낼 수가 있었다. 처음 시작에 비해 마무리 단계에 오니 DMB에 대한 이해도가 한층 높아졌고 프로젝트를 통해 새로운 지식을 알게 되어 모든 조원에게 좋은 경험이 되었다.
}
break ;
case 2: //FIG0/2=================
while( Copy_Size != 0 ) {
if(P_D == 0) {
NUM_OF_SER_COM = FIG_DATA[2] & 0x0F ;
SER_COM_SIZE = 3 + (NUM_OF_SER_COM * 2) ;
}
else if(P_D == 1) {
NUM_OF_SER_COM = FIG_DATA[4] & 0x0F ;
SER_COM_SIZE = 5 + (NUM_OF_SER_COM * 2) ;
}
Copy_Size -= SER_COM_SIZE ;
FIG_TYPE0_EXT2_SAVE_FUN(FIG_DATA, FIG_EXTENSION, P_D, SER_COM_SIZE) ;memcpy(FIG_DATA, &FIG_DATA[SER_COM_SIZE], Copy_Size) ;
}
break ;
default:
break ;
}
}
void FIG_TYPE1_FUN(INT8U * FIG_DATA, INT8U FIG_EXTENSION, INT8U LENGTH) {
INT32S i = 0 ;
printf("\nData field : ") ;
for(i = 0; i < LENGTH ;i++) {
printf("%02x ", FIG_DATA[i]) ;
}
printf("\n") ;
switch(FIG_EXTENSION) {
case 0: //FIG1/0=================
FIG_TYPE1_EXT0_SAVE_FUN (FIG_DATA, FIG_EXTENSION, LENGTH) ;
break ;
case 1: //FIG1/1=================
FIG_TYPE1_EXT1_SAVE_FUN (FIG_DATA, FIG_EXTENSION, LENGTH) ;
break ;
case 2: //FIG1/2=================
FIG_TYPE1_EXT2_SAVE_FUN (FIG_DATA, FIG_EXTENSION, LENGTH) ;
break ;
case 3: //FIG1/3=================
FIG_TYPE1_EXT3_SAVE_FUN (FIG_DATA, FIG_EXTENSION, LENGTH) ;
break ;
case 4: //FIG1/4=================
FIG_TYPE1_EXT4_SAVE_FUN (FIG_DATA, FIG_EXTENSION, LENGTH) ;
break ;
case 5: //FIG1/5=================
FIG_TYPE1_EXT5_SAVE_FUN (FIG_DATA, FIG_EXTENSION, LENGTH) ;
break ;
default:
break ;
}
}
void FIG_TYPE5_FUN(INT8U * FIG_DATA, INT8U FIG_EXTENSION, INT8U LENGTH) {
INT32S i = 0;
printf(" Data field : ") ;
for(i = 0; i < LENGTH; i++) {
printf("%02x ", FIG_DATA[i]) ;
}
printf("\n") ;
}
void FIG_TYPE6_FUN(INT8U * FIG_DATA, INT8U FIG_EXTENSION, INT8U LENGTH) {
INT32S i = 0;
printf(" Data field : ") ;
for(i = 0; i < LENGTH; i++) {
printf("%02x ", FIG_DATA[i]) ;
}
printf("\n") ;
}
[소스 28]
[소스 28]에서 main()함수는 크게 두 개의 for 문으로 이루어져 있다. 첫 번째 for문은 파일로부터 일정 크기(30byte)만큼 읽어 들이는 것을 반복한다. 두 번째 for문은 파일로부터 읽어 들인 데이터(FIB : 30Byte)에 포함될 수 있는 FIG의 경우의 수만큼 반복하면서 하나의 FIB에 포함되는 모든 FIG를 분석한다.
두 번째 for 문은 if ~ else문으로 다시 구성된다. 이 if ~ else 문은 읽어 들인 데이터(FIB : 30Byte)가 Padding 인지 아닌지를 구분한다. 만약 읽어 들인 하나의 FIB가 ①Padding이 아닌 경우 FIG TYPE과 FIG LENGTH를 구하게 되고 ②Padding인 경우 하나의 FIB분석이 완료된다. ①의 경우는 FIG LENGTH가 ‘0’보다 큰지 확인하는 if 문으로 다시 구성되고 이 if문은 FIG TYPE을 구분하기 위한 switch 문으로 구성된다.
switch 문의 각 case 문은 각 FIG TYPE을 분석하기 위한 EXTENSION 등의 파라미터를 구하고 해당하는 FIG TYPE 분석함수나 저장함수를 호출한다.
이렇게 switch문까지 실행하면 하나의 FIG 분석이 완료된다. Switch 문 다음에 있는 if ~ else 문은 하나의 FIB에 포함된 하나의 FIG 분석이 끝나고 FIB의 분석이 완료되었는가를 검토하는 부분이다. 만약 이 if ~ else 문에서 ③조건을 만족할 경우 (하나의 FIB에 하나의 FIG 만이 포함되어 있을 경우) 하나의 FIB 분석이 완료된다. ④조건을 만족하지 않을 경우 (하나의 FIB에 여러 개의 FIG가 포함되어 있을 경우) 다음 FIG 데이터를 분석하기 위해 FIB 데이터에서 분석을 마친 FIG를 제외하고 FIB 데이터를 새로 저장한다.
switch문에서 호출되는 FIG_TYPE0_FUN(), FIG_TYPE1-FUN() 등의 함수들은 각 FIG TYPE에 따른 Data Field를 출력하는 함수이다.
10. 결론 및 고찰
처음에 DMB에 대한 기본 지식이 없어서 조원 모두에게 힘든 점이 많았다. 매번 실습을 통해 공부 하였지만 어려운 부분이 많아 잘 풀리지 않는 부분도 있었다. 하지만 실습시간에 조교의 도움을 통해 많이 배우고 실습을 무사히 끝낼 수가 있었다. 처음 시작에 비해 마무리 단계에 오니 DMB에 대한 이해도가 한층 높아졌고 프로젝트를 통해 새로운 지식을 알게 되어 모든 조원에게 좋은 경험이 되었다.
추천자료
접속과 흐름
인터넷 시장 현황 및 전망
휴대인터넷
무선 모바일 인터넷의 동향
kt인사관리,인적자원관리 실제인터뷰포함
인터넷방송산업
종합무역 및 경영 전문상담사례 17차
[경영] 공급 사슬상에서 부품업체와 제조업체의 협력 단계에 따른 생산 비용함수
[계획과정, 계획과정 진행, 의사결정과정, 관광계획]계획과정의 정의, 계획과정의 진행, 계획...
[금융법, 금융환경, 자산운용규제, 금융법규제, 건전성규제, 금융지주회사, 금융회사, 규제감...
[국제레짐, 국제레짐 개념, 국제인권레짐, 국제환경규제레짐, 국제젠더정책레짐, 국제경제레...
[지역할당제][지역 인재할당제][인재할당]지역할당제(지역 인재할당제)의 필요성, 지역할당제...
예비_전력증폭기회로