Trích:
Nguyên văn bởi ubuntu7
ban thử làm thế này xem sao: khi đọc còn 4byte nữa bạn thực hiện hàm gọi fsread(). như vậy nó sẽ mất t1 thời gian để đọc xong data vào buf, trong thời gian nay ban cũng đọc nốt 4 byte còn lại vào Dac. ngày xưa mình làm với pwm cũng làm theo cách lấy bớt như thế này k bị ngắt, chạy nuột.
|
Theo mình là không thể(cách bạn làm ra sao mình không rõ lắm) vì:
nếu tốc độ lấy mẫu là 48Khz =>cứ 20.83us DAC lại lấy một mẫu và do bộ FIFO 4 từ của DAC suy ra cứ mỗi 4*20.83us=83.32us là phải đẩy dữ liệu vào bộ đệm FIFO ,trong khi đó phải mất ít nhất là 1.4ms để đọc 512 byte từ hàm fsread() và quá trình đọc dữ liệu từ thẻ nhớ là liên tục không bị ngắt, thành ra không thể làm theo cách bạn.
chỉ có cách dùng DMA là khả thi nhất thôi, còn không phải dùng một con IC nào đó như VS1001(bởi vì con này nó có bộ đệm trong khá lớn nên mình đẩy dữ liệu vào bộ đệm của nó rồi mình lại đọc dữ liệu từ thẻ nhớ chờ sẵn khi nào bộ đệm của nó hết mình lại đẩy tiếp thì được) hay con PIC hay là Dspic khác thì ok.
không biết mình nói đúng không(mới nghiên cứu thôi). Do cúp điện và bận nhiều việc nên chưa thể nào làm nhanh được