DSP

TMS320C6748 을 활용한 DSP_ SYS/BIOS Interrupt (LAB4)

알 수 없는 사용자 2019. 10. 3. 15:17
반응형

<이 내용은 강원대학교 전자공학과 실시간 신호처리 과목에서 진행된 내용을 기반으로 작성되었습니다.>

 

 

본격적으로 시작해보자. 주기적으로 반복되는 코드에 대해서 클락 모듈은 아주 유용하다. 클락 모듈은 주기적으로 함수를 실행하여준다. 기존에 힘들게 코드화하여 작성했던 타이머를 손쉽게 만들 수 있다.


App.cfg 파일에서 Clock을 하나 만들어 준다.

Initial timeout은 맨 처음 시작 시간을 의미한다. Function에 함수 이름을 넣으면 해당 함수를 설정된 매 시간마다 호출해준다.

 

이 때 내부적인 동작은 타이머를 설정하고 타이머 인터럽트를 만들어서 하드웨어 인터럽트가 아닌 소프트웨어 인터럽트 포스팅으로 함수를 호출하여 동작하는 방식을 취한다. , 내부적으로 하드웨어 인터럽트에서 소프트웨어 인터럽트로 바뀌는 것이다. 하드웨어 인터럽트는 포스팅 후 바로 종료된다. 앞서 설명하였듯이 포스팅은 예약이라 생각하면 된다.

한번 코드를 돌려보자. 그러기 위해서 전에 했던 퀵스타트를 추가해주자.

 

클럭모듈이 코드에 선언된 ProcessClk()를 주기적으로 실행시킨다. 따라서 불이 깜박이는 동작을 할 수 있게 된다.

 코드 말미에 삽입되어있는 BIOS_start(); 는 리얼타임OS로 모든 권한을 넘긴다는 의미이다. 저 함수를 통해 OS가 시작된다.

 

 LED예제 다음 순서는 버튼이었었다. 이번에도 버튼을 한번 확인하는 기능을 넣어보자.

버튼은 인터럽트를 활용할 수도 있지만 시간이 남을 때 버튼상태를 확인하는 방식으로 Idle 프로세서를 사용해서 해보자.

 

만약 idle이 없다면 available products에서 활성화를 시켜주면 된다.

함수의 이름은 ProcessIdle 이라고 정해보았다. 해당함수는 버튼의 상태를 지속적으로 확인하는 역할을 한다.

 

LAB_4A


LAB2에서는 타이머 인터럽트와 버튼 인터럽트를 모두다 손수 설정해줬다. 해당 기능의 구현을 SYS/BIOS 상에서 app.cfg를 가지고 수행해 보자. 물론 위에서 소개한 클럭모듈을 가지고 타이머 인터럽트를 대체할 수 있으나 세세한 설정까지 할 수 있는 하드웨어 인터럽트 형식으로 만들어보고자 한다. SYS/BIOS 하드웨어 인터럽트 모듈을 만들어 보자.

 

LAB2에서 이미 한번 인터럽트 설정을 해봤다. 그러한 수많은 코드들을 SYS/BIOS가 해결해 주기 때문에 우리가 입력할 것은 몇 가지 정보들만 알면 된다. app.cfg를 통해 gui형태로 코드를 만드는 것이라 봐도 된다.

 

Interrupt number. 이건 사실 기존 LAB2 코드 중 CSL_FINS에서 인터럽트 넘버를 매칭시켜주는 부분이다. 타이머는 기존과 똑같이 4번을 GPIO8번을 사용하자.

 

LAB2의 코드는 다음과 같았다.

LAB2

Event id는 우리가 인자로 넘겨주었던 id와 같다. T64P1_TINT12은 데이터 시트에 40으로 define 되어있고, GPIO_B2INT49 define되어있다.

 

LAB2의 메인문을 다시금 보자.

LAB2

app.cfgEnable at startup 체크박스는 기존 코드에서 EnableInterrupt()의 역할을 해준다. 해당 인터럽트를 SYS/BIOS가 시작함과 동시에 활성화 시킬지를 결정한다. 체크를 하지 않으면 유저가 알아서 코드 내에 EnableInterrupt()을 삽입하여야 한다. (물론 인자도 넣어야 한다.) 만약 특정 시점에서 인터럽트를 인에이블 시켜야 되는 상황이라면 체크를 안 하면 될 것이다.

 

+ 그렇다면 그 밑의 글로벌 인터럽트 인에이블은 어떻게 된 것일까? SYS/BIOS에서는 글로벌 인터럽트는 디폴트 인에이블이다.

 


설정을 통해 인터럽트 4번에 타이머를 연결하여 ProcessTimer라는 함수를 불러오는 작동을 하도록 만들었다. 그리고 버튼이 눌리면 ProcessGPIO2라는 함수를 불러오도록 만들었다. 해당 함수들은 따로 HWI(하드웨어 인터럽트)라는 파일을 만들어 정의해 넣었다. 빌드 시 같은 디렉토리 내의 C파일에 함수들이 있으면 SYS/BIOS가 해당 함수를 인터럽트와 매칭시킬 수 있다.

해당 함수는 매 시간 싸인 값을 계산하는 동작을 함께 하고 있다. 이렇게 계산된 값을 실시간으로 보고자 한다면 기존의 그래프를 실행시킨 방식과 동일하게 그래프를 연 뒤 계속하여 새로고침을 해주는 버튼을 누르면 된다.

클릭된 부분이다. 그래프가 움직이는 것 까지 확인할 수 있을 것이다.

 

반응형