2012-08-02 4 views
1

stm32f2xx의 DAC 주변 장치를 프로그래밍 중입니다. 난 바이트의 배열을 가지고 (소리) & 나는 샘플 속도 = 8K로 신호를 생성하고 싶습니다.DAC 신호 발생기 stm32

내 질문 : 어떻게 샘플 속도를 지정합니까?

참고 : 나는 많이 googled. 나는 단지 DMA를 사용하여 Trangle Wave Generation과 Sine Wave Generation을 얻고 있습니다. 나는 DMA를 사용하고 싶지 않다. 도움에 미리

감사합니다 ... 안부,

+1

http://electronics.stackexchange.com/에서 질문을 게시 해보십시오. – simon

답변

3

그것은 DMA를 사용하지 않고 DAC에서 파형을 재생하는 것은 실용적이지입니다. 샘플을 사용하여 DMA를 설정하고 타이머를 트리거로 사용하도록 DAC를 설정합니다. 그런 다음 원하는 샘플 속도로 트리거하도록 타이머를 설정합니다.

1

일반적으로 DMA 없이는 그렇게 할 수 없다는 TJD에 동의 하겠지만, 특히 낮은 샘플 속도에서는 불가능하지 않습니다.

고정 된 시간 기준으로 1/8000 초마다 트리거하는 타이머 세트를 사용할 수 있습니다. 거기에서 인터럽트 루틴은 다음 샘플을 DAC에로드해야합니다. 샘플 속도는 타이머의 시간축을 변경하여 변경할 수 있습니다.

올바른 샘플을 버퍼로 옮기는 코드를 작성하는 것과 비교할 때 DMA 컨트롤러를 구성하는 코드를 작성하는 것과 비슷한 노력이 필요합니다. 그러나 DMA 접근 방식은보다 안정적 일 수 있으며 샘플 속도에서 지터가 적고 필요할 수있는 다른 코드를 실행하기 위해 코어를 비울 수 있습니다. 실제로 TIM/DMA/DAC 설정을 사용하면 코어를 정지 시키거나 주변 장치 클럭을 계속 실행하는 절전 모드로 전환 할 수 있습니다.

0

예, TJD에도 동의합니다.
DMA를 사용하면 다른 작업의 CPU를 효율적으로 사용할 수 있습니다.
소프트웨어에서 타이밍을 관리하면 (바쁜 루프가있는 코어) [나쁜] 좋은 결과를 얻을 수 없습니다. (따라서, [좋은] 타이밍을 위해 타이머를 사용하십시오).
복사하려면 CPU 시간을 특정 시간 간격 (busy-loop 또는 timer timeout에서 DAC 레지스터까지) 후에 수행해야합니다. [나쁜]

마지막으로 DMA 및 타이머가되고, 타임 아웃하면 DMA는 DAC 레지스터에 데이터를 복사합니다. 이 솔루션은 열심히 보이지만 실제로 setup'd 할 때 작업하기가 훨씬 쉽습니다.
[주 :이 같은 것을 이해하려고/시작하려는 사람의 pov로 작성]