티스토리 뷰

프로젝트/vs1003

Control register Read/Write

Just4Fun 2017. 6. 18. 15:26

회로를 구성한 후 첫번째로 해야할 일은 vs1003안에 있는 control register를 제대로 읽어오는지 확인해 보는 것이다.

먼저, SPI를 비롯하여 vs1003과 연결된 GPIO 핀 설정부터 한다.

GPIO 설정을 한 후 HW reset 동작을 한번 수행하고, DCS와 CS 핀을 high로 유지하도록 한다.

vs1003에는 모두 16개의 control register가 있으며, 각 register의 크기는 16비트이다.

Control register를 읽어 오기 위한 동작은 다음과 같다.

DREQ신호가 high인것을 확인한 후 읽기 명령어인 0x03을 먼저 내보낸 후 register 주소값을 내 보낸다.  2바이트가 나간후 즉시 해당 레지스터에 저장되어 있는 값이 MISO 신호를 통해서 2바이트 값이 전달되게 된다.  위 그림을 보면 알겠지만 상위 바이트가 먼저 들어오고 난 뒤, 하위 바이트값이 들어오게 된다.

위의 내용을 코드로 만들어 보면 다음과 같다.


Control register에 대한 쓰기 동작은 다음과 같다.

DREQ 신호가 high인 상태에서 쓰기 명령어인 0x02를 내보내고, 쓰려고 하는 레지스터의 주소값을 알려준다.  뒤이어 레지스터에 쓰고자 하는 16비트 데이터값을 상위바이트부터 먼저 보낸 후 하위바이트값을 내보내는 동작을 수행한다.

위의 쓰기 동작을 코드로 표현하면 다음과 같다.

그럼, 실제로 vs1003의 control register 값을 제대로 읽어 오는지 모든 레지스터 값을 출력해 보도록 하겠다.

vs1003_dump_registers() 함수를 이용하여 vs1003의 레지스터를 읽어 온 결과는 다음과 같다.

Datasheet 문서에 나오는 초기값과 비교하여 제대로 읽어 왔음을 알 수 있다.

참고로 STATUS 레지스터의 초기값은 0x3C라고 되어 있지만, 칩이 enable 됨과 동시에 0x38로 바뀌게 되고, 다시 100ms 시간이 지나면 0x30으로 바뀐다고 문서에 설명되어 있다.


vs1003.zip


'프로젝트 > vs1003' 카테고리의 다른 글

vs1003 sample 데이타 재생  (0) 2017.06.24
Sine Wave 주파수 변경  (0) 2017.06.24
Sine Wave 생성  (0) 2017.06.19
VS1003 MP3 Codec  (0) 2017.06.18
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함