ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Среда
24 апреля
697720
AU08 (05.09.2016 18:02 - 18:09, просмотров: 5827)
Что такого можно сделать с DMA в Xmega, что он перестаёт выводить в ЦАП напрочь, будто "клинит" его? После выключения и повторного включения питания работает.  DMA используется для вывода звука через ЦАП. При изменении частоты звука используется один из трёх массивов с отсчётами (на 8,16 и 32) в зависимости от частоты. const u8 snd_array_size[3] = {32, 16, 8}; // размеры таблиц отсчетов u16 table32[32] = { 2048, 2427, 2792, 3128, 3423, 3665, 3845, 3955, 3993, 3955, 3845, 3665, 3423, 3128, 2792, 2427, 2048, 1669, 1304, 968, 673, 431, 251, 141, 103, 141, 251, 431, 673, 968, 1304, 1669 }; u16 table16[16] = { 2048, 2792, 3423, 3845, 3993, 3845, 3423, 2792, 2048, 1304, 673, 251, 103, 251, 673, 1304 }; u16 table8[8] = { 2048, 3423, 3993, 3423, 2048, 673, 103, 673}; const u16* table[3]={table32,table16,table8}; const u8 snd_array_size[3] = {32, 16, 8}; // размеры таблиц отсчетов Инициализация DMA выполняется несколько раз в секунду. Перед этим проверяется на состояние "занят" // перенастройка DMA - только НЕ во время транзакции, иначе вызовет ошибку! while(DMA.STATUS & DMA_CH0BUSY_bm); DMA.CH0.CTRLA &= ~DMA_CH_ENABLE_bm; DMA.CH0.SRCADDR0 = (u32) table[fdiap]; DMA.CH0.SRCADDR1 = ((u32) table[fdiap]) >> 8; DMA.CH0.TRFCNT = snd_array_size[fdiap]*2; DMA.CH0.CTRLA |= DMA_CH_ENABLE_bm;
Что такое асимметричный ответ? Это когда о тебе негативно отзываются в комментарии, а ты об авторе этого комментария пишешь хорошо и по-доброму: в некрологе!