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 는 little endian으로 구성이 되어있다 보니 value 값을 다음과 같이 넣었고, 뒤의 delay는 sample rate과 동일한 20ms로 정하였다.
이런식으로 c로 구성된 샘플링 코드를 소리로 변환했다.
더 좋은 음질의 사운드를 듣고 싶다면 sample rate를 더 키우면 되지 않을까 싶다.
'전공공부 > 마이크로프로세서 윈터캠프' 카테고리의 다른 글
RENESAS - 실습2 (0) | 2022.02.08 |
---|---|
c언어 comparison is always true due to limited range of data type [-Wtype-limits] 에러 해결 (2) | 2022.02.07 |
RENESAS - 실습1 (0) | 2022.02.02 |
RENESAS - AGT timer 설정 (0) | 2022.01.28 |
RENESAS - 버튼 설정(Interrupt) (0) | 2022.01.28 |