DSP 9

TMS320C6748 을 활용한 DSP_ FIR&IIR (LAB8)

LAB8 이제 정말 DSP를 할 순서가 왔다. 기존에 만든 시스템을 활용하여 정말 실시간 신호처리를 할 것이다. 만약 DSP에 대해 조금 공부해봤다면 DSP의 가장 기초는 푸리에변환임을 알 것이다. 그리고 푸리에변환을 위해서는 이전 값들을 알아야 한다는 사실 또한 알 것이라 생각한다. 이 푸리에 변환을 하기 위해 filter.c라는 파일에 FIRFilter를 만들어 넣었다. 이 함수는 푸리에 변환에 필요한 이전 값들을 dbuff 즉 딜레이 버퍼를 사용하여 저장해둔다. x[i]는 지금 들어온 값 즉 현재 값으로 매번 들어올 때마다 딜레이 버퍼의 내용은 뒤로 미루도록 짜여 있다. 즉, dbuff[1]의 값은 하나 과거의 값이고, 새 값은 dbuff[0]에 저장하는 것이다. 이 때 FIRFilter의 인자들은..

DSP 2021.02.03

TMS320C6748 을 활용한 DSP_EDMA&McASP (LAB7)

LAB7 LAB7에서는 EDMA를 활용하여 McASP를 다룰 것이다. 이를 위해 EDMA_McASP라는 파일을 추가하였다. 기존의 구조를 떠올리면 데이터를 받는 리시브 이벤트와 데이터를 주는 트랜스 이벤트가 있었다. 이러한 이벤트를 어디서 찾아와 설정을 했는지 살짝 설명하며 LAB7을 시작하겠다. TMS320C6748 Datasheet를 보면 여러 이벤트들의 넘버가 적혀있는 것을 볼 수 있다. 해당 데이터시트를 참고하면 McASP0 Receive가 이벤트 0번이고, Transmit는 1번임을 알 수 있다. 따라서 EDMA_McASP.h 파일에 다음과 같이 정의해놓은 것이다. 이처럼 임베디드에서는 define 하나하나까지도 정해져 있는 규칙을 따라 선언된다는 것을 유념하자. 해당 파일을 조금 설명하도록 하..

DSP 2019.11.27

TMS320C6748 을 활용한 DSP_EDMA (LAB6)

이전 LAB5에서 우리는 핑퐁버퍼를 사용하였다. 이는 매우 효율적인 시스템을 자랑하였지만 아직 아쉬운 점이 남아있었다. 전에도 이야기 하였지만 바로 매번 인터럽트를 받아온다는 사실이 바로 그것이다. 그리고 이 문제를 DMA를 통해 해결할 것이다. DMA는 Direct Memory Access의 약자로 메모리의 데이터 이동을 담당하는 하나의 도구이다. 우리 보드에 있는 DMA를 ti에서는 조금 더 발전된, 향상된 DMA라는 의미로 Enhanced를 앞에 붙여 EDMA라고 부른다. (정말로 Enhanced 되어있다.) CPU가 요리사라고 해보자. 매우 잘나가고 몸값이 비싼 요리사이다. 그런데 매일같이 하는 일의 대부분이 요리 재료를 사오고 손질하고 꺼내오고 창고를 정리하는 일이라면 그 솜씨 좋은 요리사를 제..

DSP 2019.11.11

TMS320C6748 을 활용한 DSP_ 오디오 (LAB5)

LAB_5 LAB_5에서는 드디어 오디오를 다룰 것이다. DSP를 배운다는 것은 기본적으로 오디오를 다뤄야 하기 때문에 이제야 오디오를 다룬다고 표현할 수도 있을 것 같다. 우리가 쓰는 보드에 코덱이 달려있다. 바로 AC3106I이다. 이 칩의 다이어그램을 살펴보면 다음과 같다. 이 칩은 24비트 96헤르츠까지 지원한다. 다이어그램을 자세히 보자. 잘 안보이겠지만 입력은 3개까지 넣을 수 있고 그 입력들을 믹싱 할 수 있다는 것을 알 수 있다. (동그라미+가 의미하는 것이 바로 믹싱이다.) 이런 구조에서 만약 입력된 신호 중 하나만 쓰고 싶으면 쓰고 싶은 신호를 제외하고 나머지를 0으로 만들면 될 것이다. ad컨버터는 2개 달려있고 PGA에서는 증폭을 한다. 그리고 각각의 입력에 대해 개별적인 증폭 또한..

DSP 2019.10.21

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

본격적으로 시작해보자. 주기적으로 반복되는 코드에 대해서 클락 모듈은 아주 유용하다. 클락 모듈은 주기적으로 함수를 실행하여준다. 기존에 힘들게 코드화하여 작성했던 타이머를 손쉽게 만들 수 있다. App.cfg 파일에서 Clock을 하나 만들어 준다. Initial timeout은 맨 처음 시작 시간을 의미한다. Function에 함수 이름을 넣으면 해당 함수를 설정된 매 시간마다 호출해준다. 이 때 내부적인 동작은 타이머를 설정하고 타이머 인터럽트를 만들어서 하드웨어 인터럽트가 아닌 소프트웨어 인터럽트 포스팅으로 함수를 호출하여 동작하는 방식을 취한다. 즉, 내부적으로 하드웨어 인터럽트에서 소프트웨어 인터럽트로 바뀌는 것이다. 하드웨어 인터럽트는 포스팅 후 바로 종료된다. 앞서 설명하였듯이 포스팅은 예..

DSP 2019.10.03

TMS320C6748 을 활용한 DSP_ SYS/BIOS 설치 (LAB3)

Lab2까지가 bare metal에서 펌웨어를 만드는 기본적인 과정이었다. 즉, OS가 없는 상태에서 진행되는 과정이었다. 그렇다면 과연 실제로도 OS없이 시스템을 짤까? 예전에는 시스템의 성능이 그리 좋지 않았고, 가격도 비쌌으며 메모리의 크기도 매우 작았다. 이러한 요인들에 의해 임베디드 시스템에서는 실제로 OS를 쓰지 않았었다. 하지만 요즘을 생각해보자. 과거와 달리 임베디드 시스템에게 요구되는 기능도 많아졌고, 성능대비 가격이 많이 내려가 좋은 프로세서를 싼 가격에 사용할 수 있게 되었다. 메모리 기술의 발달은 부족한 메모리 용량의 문제도 탈피시켜 주었다. 이런 상황에서 OS를 외면하는 것은 점점 힘들어진다. 여기서 말하는 OS는 윈도우와는 조금 다른 개념이다. 앞서 언급하였듯이 임베디드 시스템에..

DSP 2019.10.03

TMS320C6748 을 활용한 DSP _ 인터럽트 (LAB2)

LAB1 에서는 계속해서 버튼이 눌렸는지를 검사하였다. 하지만 이 방식은 cpu의 리소스를 매우 많이 먹기 때문에 매우 안 좋은 방식이다. 따라서 인터럽트를 사용하는 방식을 통해 조금 더 향상된 프로그램을 만들어보자. 보드에서 인터럽트가 어떻게 작용하는지 아는 것은 매우 중요하다. 세상에는 수많은 인터럽트가 있다. 이중에서 우리 보드는 128개의 인터럽트 소스를 규정하고 있다. 그리고 규정된 128개의 인터럽트 소스 중에서 12개를 받아들일 수 있다. 맨 처음 C6000계열이 나왔을 때 12개의 인터럽트를 규정 할 수 있게 만들었는데 이 부분은 변경하기 매우 어려운 부분이라 그대로 사용할 수 있는 인터럽트는 12개로 고정 되었다.(요청 할 수 있는 인터럽트가 128개다.) 서비스 할 수 있는 인터럽트는 ..

DSP 2019.09.19

TMS320C6748 을 활용한 DSP _ GPIO (LAB1)

이번에 다루는 내용은 단순한 GPIO포트 설정을 통해 LED를 조작하는 내용이다. 기초중의 기초인 LED 조작을 예제를 통해 하나씩 하나씩 많은 것들을 알아 가보자. 시작에 앞서 중요한 사실을 하나 언급하고 가도록 한다. 보드를 자세히 보면 중앙에 스위치가 8개 달려있는 것을 볼 수 있다. 이 스위치들은 딥스위치라 불린다. 딥스위치의 앞 4개는 부트모드를 설정하는데 사용되고, 뒤 4개는 유저모드로 사용할 수 있다. Off면 high, On이면 low로 인식된다. GPIO 해당 보드에는 푸시버튼 스위치 3개와(하나는 리셋스위치여서 유저스위치는 2개이다.) 4개의 유저 LED가 있다. 해당 기능들은 GPIO포트에 연결되어 있다. 보통 임베디드를 위한 보드들은 GPIO포트가 default 설정인 경우가 많다...

DSP 2019.09.19

TMS320C6748 을 활용한 DSP _ CCS v9 (LAB0)

사용 보드는 TMS320C6748 이다. 해당 보드를 위한 IDE는 CSS v9(Code Composer Studio v9)을 사용하였다. 따라서 CSS v9 설치 시 다음과 같이 체크하여야 한다. 이 외에 다른 것은 모두 기본 설정을 따른다. 또한 quickStartOMAPL1x_rCSL-2.0-Setup.exe를 통해 해당 프로그램을 설치하였다. 이때 location은 C:\ti 에 설치하였다. 프로그램의 설치가 모두 끝났으면 CCS v9을 실행시킨다. CCS는 기본적으로 이클립스와 유사한 형태를 지니고 있다. 따라서 이클립스를 사용해봤다면 쉽게 사용할 수 있을 것이다. 가장 먼저 프로젝트를 만들어준다. 프로젝트는 Project -> New CCS Project를 클릭하면 된다. 우리는 TMS320C..

DSP 2019.09.11
반응형