여기서는

앞의 문서에서도 얘기했듯이 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번 부터 보자!

DACS1000 과 5000 에 공통적으로 수행되는 함수로서, 기본적인 디바이스를 init → setup 한다. 여기서는 굳이 언급하지 않겠다.

함수명 설명
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비트모드 엑세스 지원)
함수명 설명
stboot_InitClockGen() 클럭을 설정
stboot_InitSDRAM7015() DDR 클럭을 설정한다(7020 의 세부적인 레지스터에 값을 쓰고 읽는다. DDR 메모리역시)
  • computer/digitalarena/dac5000_분석2.txt
  • Last modified: 4 years ago
  • by likewind