DAC5000 분석2
여기서는
앞의 문서에서도 얘기했듯이 main() 함수부터 어떤식으로 하드웨어를 콘트롤하는지 알아볼 것이다.
일단 main() 함수를 보자!
/*-------------------------------------------------------------------------
* Function : main
* Main entry point
* Input : optional arguments
* Output :
* Return :
* ----------------------------------------------------------------------*/
int main(void)
{
ST_ErrorCode_t ST_ErrorCode;
ST_ErrorCode = BasicInfraStructure_Init(); /* setup basic set of drivers for reporting and I/O */ ----- 1
if (ST_ErrorCode != ST_NO_ERROR)
{
printf("Basic Init Fail!!!\n");
return 0;
}
Boot7020(); ----- 2
DDR_INIT(SDRAM_FREQUENCY); ----- 3
ST_ErrorCode = AV_INIT(); ----- 4
if (ST_ErrorCode != ST_NO_ERROR) /* run test application if all went well */
{
printf("Back end Init Fail!!!\n");
return 0;
}
// initEprom(); ----- 5
// UART_Open (&uartHandle);
//*******************************************************************
(void) task_priority_set(NULL, MIN_USER_PRIORITY);/* don't block anything else */
//********************************************************************
if (ST_ErrorCode == ST_NO_ERROR) /* run test application if all went well */
{
U16 i;
LoadImageData(); ------ 6
LoadFontData(); ------ 7
OpenGDPViewPort(); ------ 8
ClearWindow2(); ------ 9
timerStart(); ------ 10
nimInit (); ------ 11
PsipInit(); ------ 12
StartUi시스템(); // 반드시 cm 뒤에 시작되어야 한다. ------- 13
KeyServerStart(); ------- 14
cmInitial (); ------- 15
// task_delay(1000*TICKS_10MS);
// siStart();
// ciInit();
// task_delay(100*TICKS_10MS);
// TEST_VIDEO();
//cmPlayLastVch ();
/////////////// Test Function /////////////////////
cmPlayTest ();//pys_LVDS, khk_test
// cmPlayTest ();//pys_LVDS, khk_test
// cmChangeFrequencyTest(663000000);
// printf("Play video!\n");
// TestMessage();
/////////////// Test Function /////////////////////
}
task_suspend(0);
return (ST_ErrorCode); /* return error code */
}
여기서 유의해야 할 점은 위에서 주석처리가 되어있다고 해서, 무시하고 넘어가면 안된다는 것이다.
함수 옆에 번호가 붙어있다. 번호에 따라 각각의 모듈별로 역할을 분석한다.
세부 분석
차례대로 1번 부터 보자!
1. BasicInfraStructure_Init()
DACS1000 과 5000 에 공통적으로 수행되는 함수로서, 기본적인 디바이스를 init → setup 한다. 여기서는 굳이 언급하지 않겠다.
2. Boot7020()
| 함수명 | 설명 |
| reset7020() | GPIO 핀인 7020_RESET를 LOW → HIGH 로 콘트롤해서 7020 reset 을 시킨다 |
| set7020add26() | GPIO 핀인 7020_A26 을 LOW 로 콘트롤해서 DDR 메모리맵을 세팅한다 |
| resetcongifebank2() | 5517로 부터 나가는 auxiliary clock 레지스터를 세팅한다 하지만, 현재 회로도에서 연결되어있지 않기 때문에 따로 특별히 세팅을 해줄 필요가 없다 |
| set7020mode_16bit() | 5517로 부터 나가는 CONFIG_CONTROL_E 레지스터를 세팅한다(0x0022003f) bank2 주소를 확장한다. EMI_GENCFG 레지스터를 세팅한다(0x000006c1) bank2 를 제외한 다른 bank 주소를 리셋한다 bank0 는 sdram이다. 0x60000000+0x0B0 에 0x1 을 세팅한다(16비트모드 엑세스 지원) |
3. DDR_INIT()
| 함수명 | 설명 |
| stboot_InitClockGen() | 클럭을 설정 |
| stboot_InitSDRAM7015() | DDR 클럭을 설정한다(7020 의 세부적인 레지스터에 값을 쓰고 읽는다. DDR 메모리역시) |