RENESAS - DAC, audio conversion

2022. 2. 2. 21:59전공공부/마이크로프로세서 윈터캠프

실습에 사용할 스피커

성균관대학교 윈터캠프 <마이크로프로세서 - 전재욱 교수님>에서 실습한 내용 중 일부다.

Renesas RA6M3(176 pin) 계열의 칩을 선택했다. 그리고 IDE는 E2 studio를 활용했다.


위의 스피커를 활용해서 소리를 넣었다. 

 

DAC란 Digital to Analog Converting이라는 뜻으로 digital 신호를 analog 신호로 번경한다. 즉 비연속적인 신호를 연속적인 신호로 변경한다.

 

DAC channel output maximum voltage가 3.3V이고 Resolution이 만약 4-bit 라면 1-bit당 3.3/16 = 0.2066V씩 나누어 갖는다. 

 

- stacks configuration

 

새로운 stack(analog-> DAC)을 만들어 디지털 신호로 구성된 C를 아날로그 신호인 사운드로 변환하는 역할을 도와준다.

 

- Code

#include "hal_data.h"

FSP_CPP_HEADER
void R_BSP_WarmStart(bsp_warm_start_event_t event);
FSP_CPP_FOOTER

extern unsigned char rawData[127968];

/*******************************************************************************************************************//**
 * main() is generated by the RA Configuration editor and is used to generate threads if an RTOS is used.  This function
 * is called by main() when no RTOS is used.
 **********************************************************************************************************************/
void hal_entry(void)
{
    /* TODO: add your own code here */
    R_DAC_Open(&g_dac0_ctrl, &g_dac0_cfg);
    R_DAC_Start(&g_dac0_ctrl);

    uint16_t value;

    while(1){
        for(uint16_t i=0; i< sizeof(rawData); i+=2){
            value = (uint16_t)(rawData[i] | rawData[i+1] <<8);
            R_DAC_Write(&g_dac0_ctrl, value);
            R_BSP_SoftwareDelay(20, BSP_DELAY_UNITS_MICROSECONDS);
        }
        R_BSP_SoftwareDelay(2, BSP_DELAY_UNITS_SECONDS);
    }


#if BSP_TZ_SECURE_BUILD
    /* Enter non-secure code */
    R_BSP_NonSecureEnter();
#endif
}

 

여기서 rawData는 사운드이고 c언어로는 다음과 같다.

ringtone.c

그리고 ringtone.c 는 little endian으로 구성이 되어있다 보니 value 값을 다음과 같이 넣었고, 뒤의 delay는 sample rate과 동일한 20ms로 정하였다. 

 

이런식으로 c로 구성된 샘플링 코드를 소리로 변환했다.

더 좋은 음질의 사운드를 듣고 싶다면 sample rate를 더 키우면 되지 않을까 싶다.