ARM-project

Park SeungChan·2024년 4월 19일
0

3일간 arm project를 진행했다. Music Controller

MP3, 장난감 등에 활용될 수 있는 음악재생 컨트롤러로 주제를 정했다.

기능

  • 다이얼 버튼을 통해 음악 변경 및 일시정지
  • 음량조절기능
  • LCD에 재생 음악, 정지, 음량 등의 정보 표시

cpu가 주변장치와 상호작용하는데는 다음과 같은 방식들이 있다.

  1. Polling방식은 프로그램이 실행되고 해당 주변장치에 접근하는 명령어 코드를 만나 조건이 성립하면 실행된다. 간단히 코드를 작성해 구현 가능하다는 장점이 있지만, 즉각적인 반응과 scan rate이 감소한다는 단점이 있다.
  2. Interrupt방식은 프로그램이 진행되는 도중 해당 인터럽트가 발생하면 즉식 하던 일을 중단하고 인터럽트 핸들러 루틴을 수행한다. 루틴 수행을 마치면 다시 중단지점으로 돌아와 계속 프로그램이 진행된다. 주변장치로 즉각적인 접근을 할 수 있어 Polling방식에 비해 빠르게 반응한다.
  3. DMA방식은 DMA라는 또다른 하드웨어가 cpu가 하던 업무를 대신 할당받아 주변장치와 메모리의 연결을 cpu대신 진행한다. 인터럽트 방식과 마찬가지로 조건이 만족될 때 즉시 데이터를 얻을 수 있으며 또한 주변장치와 메모리의 데이터 이동을 DMA가 직접 작업하므로 그 동안 cpu는 다른 작업을 수행해 나갈 수 있다.

프로젝트에서 버튼의 즉각적인 반응을 원하므로 인터럽트 방식을 사용했고, ADC의 데이터가 실시간으로 받으면서 cpu의 리소스를 줄이기 위해 DMA 방식을 선택했다.

버튼을 누르면 음악이 정지되야 하지만 간혹 정상적으로 정지되지 않는 문제가 발생했다. 문제의 원인으로 chattering현상이 있었고, 해결방법으로는 HW적 방법으로 cap을 통해 지연시켜 debouncing하거나, SW적 방법으로는 인터럽트가 발생할 때 두개의 변수를 만들어 각각 인터럽트가 발생하는 시간차이로 구분한다. 이전 시간과 인터럽트 발생시간 차이가 크면 특정 if문을 실행하고, 발생시간 차이가 작은 경우 chattering에 의한 인터럽트라 판단하여 if를 무시하고 넘어간다.

음량조절을 위해 가변저항과 ADC를 이용하였으며 이때 가변저항의 데이터 변화를 계속해서 받아내기 위해 DMA방식을 사용하였다.

프로젝트를 진행하면서 여러 Peripheral의 기능들을 적용해 볼 수 있었으며 특히 코드를 작성할 때 원할한 scan rate을 유지하며 원하는 기능을 수행할 수 있게 만드는 것이 중요하다고 생각되었다.

profile
RTL Circuit Design & Verification

0개의 댓글

관련 채용 정보