реклама на сайте
подробности

 
 
> DMA+DAC, изменение массива на лету
stm32f4
сообщение Oct 2 2012, 09:17
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 45
Регистрация: 11-08-12
Пользователь №: 73 098



Всем привет)Поскажите, как можно изменить значения массива, который указан в качестве передаваемого в DMA ЦАПу?
т.е имеется массив значений для генерации синуса:
Код
const uint16_t sin_50hz[] =
{ 2048, 2112, 2177, 2241, 2305, 2368, 2432, 2495, 2557, 2619, 2681, 2742, 2802,
        2861, 2920, 2978, 3035, 3091, 3145, 3199, 3252, 3303, 3353, 3402, 3450,
        3496, 3541, 3584, 3626, 3666, 3705, 3742, 3777, 3811, 3843, 3873, 3901,
        3928, 3952, 3975, 3996, 4015, 4032, 4047, 4060, 4071, 4080, 4087, 4092,
        4095, 4095, 4095, 4092, 4087, 4080, 4071, 4060, 4047, 4032, 4015, 3996,
        3975, 3952, 3928, 3901, 3873, 3843, 3811, 3777, 3742, 3705, 3666, 3626,
        3584, 3541, 3496, 3450, 3402, 3353, 3303, 3252, 3199, 3145, 3091, 3035,
        2978, 2920, 2861, 2802, 2742, 2681, 2619, 2557, 2495, 2432, 2368, 2305,
        2241, 2177, 2112, 2048, 1984, 1919, 1855, 1791, 1728, 1664, 1601, 1539,
        1477, 1415, 1354, 1294, 1235, 1176, 1118, 1061, 1005, 951, 897, 844,
        793, 743, 694, 646, 600, 555, 512, 470, 430, 391, 354, 319, 285, 253,
        223, 195, 168, 144, 121, 100, 81, 64, 49, 36, 25, 16, 9, 4, 1, 0, 1, 4,
        9, 16, 25, 36, 49, 64, 81, 100, 121, 144, 168, 195, 223, 253, 285, 319,
        354, 391, 430, 470, 512, 555, 600, 646, 694, 743, 793, 844, 897, 951,
        1005, 1061, 1118, 1176, 1235, 1294, 1354, 1415, 1477, 1539, 1601, 1664,
        1728, 1791, 1855, 1919, 1984 };

с помощью DMA я передаю ЦАПу все значения по прерыванию таймера!!!!!
Код
//***********DMA1***************
    RCC->AHB1ENR    |= RCC_AHB1ENR_DMA1EN;
    DMA1_Stream5->CR|= DMA_SxCR_CHSEL;            // 111: channel 7 selected
    DMA1_Stream5->PAR= (uint32_t)&DAC->DHR12R1; // указатель на переферийное устройство
    DMA1_Stream5->M0AR=(uint32_t)&sin_50hz[0];//адрес буфера
    DMA1_Stream5->NDTR=200;                        // кол-во передаваемых данных
    DMA1_Stream5->CR|= DMA_SxCR_MINC;            // инкремент указателя буфера
    DMA1_Stream5->CR|= DMA_SxCR_MSIZE_0;        // размер элемента в памяти 16 бит
    DMA1_Stream5->CR|= DMA_SxCR_PSIZE_0;        // размер элемента в переферии 16 бит
    DMA1_Stream5->CR|= DMA_SxCR_CIRC;            // цикличная передача данных
    DMA1_Stream5->CR|= DMA_SxCR_DIR_0;            // 01: Memory-to-peripheral
    DMA1_Stream5->CR|= DMA_SxCR_PL;                // 11: Very high
    DMA1_Stream5->CR|= DMA_SxCR_EN;                // включение ПДП


так вот,повторюсь) как в процессе передачи данных добавить делитель!!!!!!!!!!! к примеру по нажатию кнопки урезать(увеличить) размах!!!!!!т.е сделать что-то типа этого: DMA1_Stream5->M0AR=((uint32_t)&sin_50hz[0])/2-делить каждый элемент буферана опр знач!
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
YAM
сообщение Oct 3 2012, 05:47
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 256
Регистрация: 7-07-04
Из: Ukraine
Пользователь №: 291



А что, уже не кошерно на выход DAC поставить цифровой резюк и делать что хочешь уже на выходе? (все равно там ну хоть какой буфер надо ставить) rolleyes.gif
Вы же должны сами понимать, что при чисто "цифровом делении" уменьшается число квантовний выходного сигнала.


--------------------
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 20:43
Рейтинг@Mail.ru


Страница сгенерированна за 0.01377 секунд с 7
ELECTRONIX ©2004-2016