![]() |
|
Tài trợ cho PIC Vietnam |
dsPIC - Bộ điều khiển tín hiệu số 16-bit Theo dự kiến của Microchip, vào khoảng năm 2011 dsPIC sẽ có doanh số lớn hơn PIC |
|
Ðiều Chỉnh | Xếp Bài |
![]() |
#9 | |
Đệ tử 5 túi
Tham gia ngày: Jan 2008
Bài gửi: 97
: |
Trích:
Hiện tại mình phát nhạc với tốc độ lấy ,mẫu 16khz, stereo chạy cực tốt. Do thiếu thạch anh 24.576M, nên chưa thử play nhạc ở tốc độ 48Khz, stereo được . Nhưng mình tính thấy rằng DMA có 2k Ram , mình cấp cho độ đệm kênh phải RightBufA=128*2 byte( RightBufA có kiểu int) và RightBufB=128*2 byte(RightBuf có kiểu int), và cũng tương tự cho kênh trái LetBufA, LetBufB, chạy DMA ở chế độ repeat,continue,ping-pong và HALF: Block Transfer Interrupt Select bit =0. Đọc 512 byte từ thẻ nhớ mất khoảng 3.25ms(thực ra nếu đọc 512 byte đã được canh lề đúng thì chỉ mất 1.42ms , nhưng do khi đọc thực tế thì có thể không canh lề đúng vì dữ liều có thể nằm trên 2 sector khác nhau trong 1 lần đọc 512 byte)512 byte này thì RightBufA hoặc RightBufB lấy 128*2 byte và LetBufA hoặc LetBufB lấy 128*2 byte và vì tốc độ lấy mẫu là 48Khz => cứ 20.833us lại lấy mẫu một lần, và vì RightBufA hay RightBufB,... là 128 => cứ mỗi 20.833us*128 =2.6667ms DMA kênh 0(cho kênh phải) và kế đó là DMA kênh 1(cho kênh trái) lại ngắt một lần. Tóm lại thì sau 2.6667ms thì CPU phải đẩy dữ liệu vào cho cả 2 kênh. Vậy là không đủ thời gian =>âm thanh sẽ bị ngắt ngãng, chưa tính đến phải xử lý âm thanh. vậy làm sao để giải quyết đây, bạn có cách nào không. |
|
![]() |
![]() |
|
|