TOPPERS/TTSP를 athrill에서 작동 (TTSP의 대상 종속 코드 구현)

개요



이 기사는 "TOPPERS/TTSP 작동"의 TTSP의 대상 의존부에 대한 해설 기사입니다.

종속 코드는, 이하의 4종류/합계 9개가 있습니다.
  • 타이머 의존부(3개)
  • 인터럽트 의존성 (2 개)
  • CPU 예외 의존성 (2 개)
  • 작업 종속 부분 (2 개)

  • 구현 개요 및 상세



    타이머 의존부



    전제 지식으로서 ASP의 시스템 시간은 1ms주기 타이머로 정기 갱신 (signal_time ())됩니다.
    TTSP 테스트에서는 시스템 시간 관리용 타이머를 정지/시작/1ms 진행시키는 API를 사용하여 ASP의 시스템 시간이 적절하게 갱신/비갱신되었는지 확인합니다.

    (1) 정지: ttsp_target_stop_tick



    타이머를 정지시키기 위해, 이하의 조작을 실시.
    1. 인터럽트 컨트롤러의 인터럽트를 금지 상태로 설정
    2. 타이머 동작을 정지
    3. 펜딩 중 인터럽트 요구도 클리어
        SIL_PRE_LOC;
    
        SIL_LOC_INT();
    
        x_disable_int(INTNO_TIMER);
        SetTimerStopTAA(INTNO_TIMER);
        x_clear_int(INTNO_TIMER);
        SIL_UNL_INT();
    

    (2) 시작: ttsp_target_start_tick



    타이머를 시작하기 위해 다음 작업을 수행합니다.
    1. 타이머 동작 시작
    2. 인터럽트 컨트롤러의 인터럽트를 허가 상태로 설정
        SIL_PRE_LOC;
    
        SIL_LOC_INT();
    
        SetTimerStartTAA(TIMER_DTIM_ID);
        x_enable_int(INTNO_TIMER);
    
        SIL_UNL_INT();
    

    (3) 1ms 진행: ttsp_target_gain_tick



    시스템 시간을 1ms 진행시키기 위해 타이머 인터럽트가 한 번 발생합니다.
    이 기능을 구현하기 위해 다음 대기 처리가 수행됩니다.
    이 함수의 호출 조건은 타이머 정지 상태로 설정됩니다.
  • 현재 타이머 카운트 값 얻기
  • 타이머 동작 시작
  • 다음 인터럽트가 발생할 때까지 HALT 명령으로 기다린다
  • 타이머 작동 중지
  •     SIL_PRE_LOC;
    
        SIL_LOC_INT();
        SetTimerStartTAA(TIMER_DTIM_ID);
        x_enable_int(INTNO_TIMER);
    
        do_halt();
    
        SIL_UNL_INT();
    
        SIL_LOC_INT();
        x_disable_int(INTNO_TIMER);
        SetTimerStopTAA(INTNO_TIMER);
        SIL_UNL_INT();
    

    이하, 상기 함수 실행 후의 타이머 의존부의 테스트 실행 결과입니다.
    [CPU>
    system1 : 0
    system2 : 10
    timer_interrupt : OK
    system1 : 10
    system2 : 10
    ttsp_target_stop_tick() : OK
    system1 : 19
    system2 : 20
    ttsp_target_gain_tick() : OK
    system1 : 21
    system2 : 31
    ttsp_target_start_tick() : OK
    Check point 1 passed.
    All check points passed.
    q
    [NEXT> pc=0x8d0a target_config.c 44
    [DBG>e
    clock = cpu 20426497 intc 1767 real_time  35.077789
    

    인터럽트 의존부



    (4) 인터럽트 발생 : ttsp_int_raise



    이 함수는 인수 (intno)의 값을 인터럽트 번호로 사용하여 인터럽트를 생성해야합니다. 실기상에서 임의의 인터럽트를 발생시키는 것은 곤란하고, 타이머 인터럽트를 이용하는 것으로 어떻게든 요구 사양을 만족시키는 형태가 된다고 생각됩니다.

    반면에 가상 환경에서는이 부분이 잘 작동합니다. 특히 프로그램 실행 중에 인터럽트를 생성 할 수 있도록 athrill은 디버깅 변수 athrill_device_raise_interrupt를 제공합니다. 이하, 실장 상세입니다.
        athrill_device_raise_interrupt = intno;
    

    위의 변수 할당 직후 인터럽트가 발생합니다.

    (5) 인터럽트 요구 클리어 : ttsp_clear_int_req



    이 함수는 인수 (intno)의 값을 인터럽트 번호로 사용하여 인터럽트 요청을 지 웁니다.
    이하, 실장 상세입니다.
        x_clear_int(intno);
    

    이하, 상기 함수 실행 후의 인터럽트 의존부의 테스트 실행 결과입니다.
    [CPU>Check point 1 passed.
    Check point 2 passed.
    ttsp_int_raise(TTSP_INTNO_A) : OK
    Check point 3 passed.
    Check point 4 passed.
    Check point 5 passed.
    ttsp_int_raise(TTSP_INTNO_A) : OK
    Check point 6 passed.
    Check point 7 passed.
    Check point 8 passed.
    ttsp_int_raise(TTSP_INTNO_D) : OK
    Check point 9 passed.
    ttsp_int_raise(TTSP_INTNO_E) : OK
    Check point 10 passed.
    ttsp_int_raise(TTSP_INTNO_F) : OK
    Check point 11 passed.
    ttsp_int_raise(TTSP_INTNO_A) : OK
    Check point 12 passed.
    ttsp_int_raise(TTSP_INTNO_B) : OK
    Check point 13 passed.
    ttsp_int_raise(TTSP_INTNO_C) : OK
    Check point 14 passed.
    Check point 15 passed.
    Check point 16 passed.
    All check points passed.
    q
    [NEXT> pc=0x92b8 target_config.c 44
    [DBG>e
    clock = cpu 908748 intc 520 real_time  0.596828
    

    위의 테스트 내용을 분석 한 결과를 시퀀스 다이어그램에 남겨 둡니다.
  • 체크포인트(1-7)
  • 체크포인트(8-10)
  • 체크포인트(11-16)

  • CPU 예외 의존부



    (6) CPU 예외 발생 : ttsp_cpuexc_raise



    이 함수는 인수 (excno)의 값을 예외 번호로 CPU 예외를 발생시켜야합니다.
    이번에는 TRAP 명령으로 CPU 예외를 발생시키기로 결정했습니다.
    이하, 실장 상세입니다.
        do_trap(0x01);
    

    (7) CPU 예외 발생시의 후크 함수 : ttsp_cpuexc_hook



    athrill 고유의 후크 함수 구현이 불필요하다고 생각되었으므로 일단 구현 대상에서 제거했습니다.

    이하, 상기 실장을 실시해, CPU 예외 테스트를 실행한 결과입니다.
    Check point 1 passed.
    [TSK]ttsp_cpuexc_raise(TTSP_EXCNO_A) : OK
    Check point 2 passed.
    Check point 3 passed.
    Check point 4 passed.
    [TEX]ttsp_cpuexc_raise(TTSP_EXCNO_A) : OK
    Check point 5 passed.
    Check point 6 passed.
    Check point 7 passed.
    Check point 8 passed.
    [ALM]ttsp_cpuexc_raise(TTSP_EXCNO_A) : OK
    Check point 9 passed.
    Check point 10 passed.
    Check point 11 passed.
    Check point 12 passed.
    [CYC]ttsp_cpuexc_raise(TTSP_EXCNO_A) : OK
    Check point 13 passed.
    Check point 14 passed.
    Check point 15 passed.
    All check points passed.
    

    작업 의존부



    athrill 고유의 태스크 의존 처리는 불필요했기 때문에, 구현 대상에서 제외했습니다.

    관련 기사


  • TOPPERS/TTSP를 athrill로 동작시킨다
  • 좋은 웹페이지 즐겨찾기