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

 
 
> 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



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

 


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


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