[DSP]/DSP60002012. 2. 3. 21:30

[TMS320C6720 EVM] RTI Timer 테스트 - 1초 만들기

[TMS320C6720 EVM] RTI Timer 테스트 - 1초 만들기


TMS320C67xx RTI Timer 관련 자료

TMS320C672x는 C671x에 있는 일반적인 타이머 모듈이 없고 The Real-Time Interrupt Module (RTI) 라고 하는 타이머 모듈이 2채널 존재 한다.
 






TMS320C6720 RTI Timer 인터럽트 핸들러
//time interval = 1ms
void RTI_TimerHandler(void)
{
    Bool          intEvent;
    CSL_Status    status;

    /* Read the interrupt flag register */
    status = CSL_rtiGetHwStatus (hRti, CSL_RTI_QUERY_INT0_STATUS, &intEvent);

 //----------------------------------------
 Led1Toggle();

 gTimeTick1++;
 //----------------------------------------

    /* Clear the interrupt */
    status = CSL_rtiHwControl (hRti, CSL_RTI_CMD_CLEAR_INT0, &intEvent);
}



TMS320C6720 RTI Timer 초기화 함수
void RTI_Setup(void)
{
    CSL_RtiObj               rtiObj;
    CSL_Status               status = CSL_SOK;
    CSL_RtiHwSetup           hwSetup = CSL_RTI_HWSETUP_DEFAULTS;
    CSL_RtiHwSetup           hwSetupRead;
    Uint16                   count = 0;

    /* clear local data structures */
    memset (&rtiObj, 0, sizeof (CSL_RtiObj));
    memset (&hwSetup, 0, sizeof (CSL_RtiHwSetup));
    memset (&hwSetupRead, 0, sizeof (CSL_RtiHwSetup));

    /* Initalize the RTI csl module */
    status = CSL_rtiInit (NULL);
    
    /* Open csl module */
    hRti = CSL_rtiOpen (&rtiObj, CSL_RTI, NULL, &status);
    if ((status != CSL_SOK) || (hRti == NULL)) return;

    /* Setup hardware parameters */       
    hwSetup.blk0ExtnCntl                    = CSL_RTI_CAPTURE_EVENT_SOURCE1;
    hwSetup.blk1ExtnCntl                    = CSL_RTI_CAPTURE_EVENT_SOURCE1;  
    hwSetup.compareUpCntrs.compareUpCntr0   = UC_COMP_VALUE;  
    hwSetup.compVal.comp0Val                = COMPARE0_VALUE;
    hwSetup.compVal.comp1Val                = COMPARE1_VALUE;
    hwSetup.compVal.comp2Val                = COMPARE2_VALUE;
    hwSetup.compVal.comp3Val                = COMPARE3_VALUE;
    hwSetup.updateCompVal.updateComp0Val    = UPDATECOMPARE_VALUE;
    hwSetup.updateCompVal.updateComp1Val    = UPDATECOMPARE_VALUE;
    hwSetup.updateCompVal.updateComp2Val    = UPDATECOMPARE_VALUE;
    hwSetup.updateCompVal.updateComp3Val    = UPDATECOMPARE_VALUE;  
    hwSetup.preLoadWatchdog                 = PRELOAD_VALUE;   
       
    /* Enable compIntr0 alone */
    hwSetup.intConfig.compIntr0En       = TRUE;
    hwSetup.intConfig.compIntr1En       = FALSE;
    hwSetup.intConfig.compIntr2En       = FALSE;
    hwSetup.intConfig.compIntr3En       = FALSE;

    /* Stop Rti Block0 counters */
    status = CSL_rtiHwControl (hRti, CSL_RTI_CMD_STOP_BLOCK0, NULL);

    /* Setup rti module */
    status = CSL_rtiHwSetup (hRti, &hwSetup);

    /* verify the hwsetup configuration */
    status = CSL_rtiGetHwSetup (hRti, &hwSetupRead);

    /* Start Rti Block0 counters */
    status = CSL_rtiHwControl (hRti, CSL_RTI_CMD_START_BLOCK0, NULL);
    }




TMS320C6720 RTI Timer 테스트 예제 소스코드
TMS320C6720의 RTI0를 이용하여 1ms 인터럽트로 구동하고 메인함수에서 1초마다 한번씩 LED를 점등하는 예제이다.
void main()
{
 SystemInit();

 //Led Init..
 Led1Init();
 Led2Init();

 Led1Off();
 Led2Off();

 DebugPrint("[TMS320C6720 EVM] Test Program - RTI Timer.\n");

 //RTI Timer 초기
 RTI_Init();

 while(1)
 {
  //1000ms/1ms = 1000 => 1초
  if(gTimeTick1>1000)화
  {
   gTimeTick1 = 0;

   Led2Toggle();
  }
 }
}

Posted by nexp

댓글을 달아 주세요

[DSP]/DSP60002011. 7. 4. 21:30

[TMS320C6720 EVM] 보드 개발기 - C6720 개발환경설정

[TMS320C6720 EVM] 보드 개발기 - C6720 개발환경설정


CCS3.3을 이용하여 TMS320CC6720 개발하기 위한 환경 설정 방법을 정리 해 본다.
일단 기본적인 동작을 테스트 하기위해 이므로 최대한 간단하게 작성해 보았다.

먼저 CCS3.3 실행하고 새로운 프로젝트를 생성한다.



옵션 설정
TargetVersion을 C670x로 설정 한다.



파일 PATH잡아 주고



main.c,  system.c, cmd파일 링크 시키고 간단한 예제를 작성해 보았다.
컴파일 하니 정상 으로 컴파일 된다. 다운로드 해서 메시지 창에 데이터 출력까지 확인 된다.





CCS4 를 이용한 C6720 개발환경 설정
TI에서 제공하는 RTOS SYS/BIOS를 이용하려면 CCS4이상이 필요하다. CCS4에서 TMS320C6720 개발환경 설정하고 테스트 해 보았다.

C6000 타입의 새로운 프로젝트를 생성한다.



기본 설정 선택



디렉토리 PATH설정



CCS4에서 기본적인 설정 완료하고 컴파일 결과 C6000 프로젝트파일이 잘 컴파일 되는것을 확인 할 수 있다.
Posted by nexp

댓글을 달아 주세요

[DSP]/DSP60002011. 6. 30. 12:44

[TMS320C6720 EVM] 보드 개발기 - 메모리 구조 파악

[TMS320C6720 EVM] 보드 테스트기 - 메모리 구조 파악
C6720의 내부 램과 롬의 구조는 단순하고 효율적이다. 롬은 64비트 4개 뱅크, 256비트 2개 뱅크로 구성되어 있다.
램은 하나의 256비트 페이지와 8개의 32비트 뱅크로 구성된다.
아래 그림에서 처럼 0x1000 0000 번지가 램의 시작 번지 이다.



C6720 CMD파일
일단은 내부 램(0x1000 0000)에 올리는것으로 하고 CMD파일을 작성해 보았다.
-c
-heap  0x2000
-stack 0x4000
 
/* link with the C67x+ rts library */
-l rts67plus.lib

/* link the software system patch into the application */
/* required for proper device operation */
-l ..\libs\applySystemPatch.obj              
-l ..\libs\c672xSystemPatchV2_00_00.lib
/* link in the c67x sw DSP lib */
-l ..\libs\dsp67x.lib

MEMORY
{
    /* rom memory map */
    IROM_BOOT:       o = 00000000h   l = 00020000h
    IROM_DSPLIB:     o = 00020000h   l = 0000C000h
    IROM_FASTRTS:    o = 0002C000h   l = 00004000h
    IROM_BIOS:       o = 00030000h   l = 00030000h           /* ram memory map */

    /* reserved at boot for bootloader */
    IRAM_BOOT:       o = 10000000h   l = 00001000h

   /* internal ram available for user applications */
    IRAM_USER:       o = 10001000h   l = 0003F000h
}
SECTIONS
{
    /* C standard sections */
    .text    >    IRAM_USER
    .stack   >    IRAM_USER
    .far     >    IRAM_USER
    .switch  >    IRAM_USER
    .tables  >    IRAM_USER
    .data    >    IRAM_USER
    .bss     >    IRAM_USER
    .cinit   >    IRAM_USER
    .sysmem  >    IRAM_USER
    .const   >    IRAM_USER
    .cio     >    IRAM_USER
    .pinit   >    IRAM_USER
}
Posted by nexp

댓글을 달아 주세요