Категории:

  • Программирование


  • Изобразительное искусство


  • Программирование встраиваемых систем


  • Компьютерная графика


  • WEB Разработка


  • Музыка


  • Инженерия


  • iVARIOUS


  • Mobil App


  • STM32. DMA controller

    STM32 DMA DMA Контроллер - блок , обеспечивающий коммутацию между периферийными блоками и оперативной, flash и другой памятью без использования ресурсов центрального процессора. Главная его задача обеспечить высокую скорость передачи данных из периферии в память, из памяти в периферию, и из памяти в память не отвлекая на эту рутинную работу процессор, который в это время может выполнять более вычислительные задачи.
    DMA контроллер содержит 8 потоков для данных , в каждом потоке по 8 каналов, на которых находятся источники данных: периферия и память. DMA контроллер не может через один поток пропускать два и больше канала (два и больше разных источника данных - от периферийных блоков или памяти) в один момент времени, так как это нарушает саму суть DMA - обеспечить максимальную скорость передачи данных. В принципе это и не нужно, так как неважно будут ли два источника передавать данные одновременно или по очереди - суммарная скорость теоретически будет одинакова.
    Как уже говорилось в прошлых статьях, любой периферийный блок представляет собой совершенно независимое устройство, хотя и интегрированное в общий корпус с процессором. Поэтому передачу и контроль за передачей данных спокойно можно возложить на DMA, а не отвлекать центральный процессор чтоб подсчитывать байты, следить за адресами и передачей данных в целом. Роль процессора заключается только в том, чтоб указать DMA, сколько и куда нужно переместить данных. После проделанной работы DMA сообщит процессору что все готово и можно действовать с учетом дальнейшей программы.

    //......DMA....
    //.............
    #define DMA1_RCC *((uint32_t*)0x40023830)//|=0x200000;
    #define DMA_LISR *((uint32_t*)0x40026000)
    #define DMA_HISR *((uint32_t*)0x40026004)
    #define DMA_LIFCR *((uint32_t*)0x40026008)
    #define DMA_HIFCR *((uint32_t*)0x4002600C)
    #define DMA_S0CR *((uint32_t*)0x40026010)
    #define DMA_S0NDTR *((uint32_t*)0x40026014)
    #define DMA_S0PAR *((uint32_t*)0x40026018)
    #define DMA_S0M0AR *((uint32_t*)0x4002601C)
    #define DMA_S0M1AR *((uint32_t*)0x40026020)
    #define DMA_S0FCR *((uint32_t*)0x40026024)
    #define DMA_S1CR *((uint32_t*)0x40026028)
    #define DMA_S1NDTR *((uint32_t*)0x4002602C)
    #define DMA_S1PAR *((uint32_t*)0x40026030)
    #define DMA_S1M0AR *((uint32_t*)0x40026034)
    #define DMA_S1M1AR *((uint32_t*)0x40026038)
    #define DMA_S1FCR *((uint32_t*)0x4002603C)
    #define DMA_S2CR *((uint32_t*)0x40026040)
    #define DMA_S2NDTR *((uint32_t*)0x40026044)
    #define DMA_S2PAR *((uint32_t*)0x40026048)
    #define DMA_S2M0AR *((uint32_t*)0x4002604C)
    #define DMA_S2M1AR *((uint32_t*)0x40026050)
    #define DMA_S2FCR *((uint32_t*)0x40026054)
    #define DMA_S3CR *((uint32_t*)0x40026058)
    #define DMA_S3NDTR *((uint32_t*)0x4002605C)
    #define DMA_S3PAR *((uint32_t*)0x40026060)
    #define DMA_S3M0AR *((uint32_t*)0x40026064)
    #define DMA_S3M1AR *((uint32_t*)0x40026068)
    #define DMA_S3FCR *((uint32_t*)0x4002606C)
    #define DMA_S4CR *((uint32_t*)0x40026070)
    #define DMA_S4NDTR *((uint32_t*)0x40026074)
    #define DMA_S4PAR *((uint32_t*)0x40026078)
    #define DMA_S4M0AR *((uint32_t*)0x4002607C)
    #define DMA_S4M1AR *((uint32_t*)0x40026080)
    #define DMA_S4FCR *((uint32_t*)0x40026084)
    #define DMA_S5CR *((uint32_t*)0x40026088)
    #define DMA_S5NDTR *((uint32_t*)0x4002608C)
    #define DMA_S5PAR *((uint32_t*)0x40026090)
    #define DMA_S5M0AR *((uint32_t*)0x40026094)
    #define DMA_S5M1AR *((uint32_t*)0x40026098)
    #define DMA_S5FCR *((uint32_t*)0x4002609C)
    #define DMA_S6CR *((uint32_t*)0x400260A0)
    #define DMA_S6NDTR *((uint32_t*)0x400260A4)
    #define DMA_S6PAR *((uint32_t*)0x400260A8)
    #define DMA_S6M0AR *((uint32_t*)0x400260AC)
    #define DMA_S6M1AR *((uint32_t*)0x400260B0)
    #define DMA_S6FCR *((uint32_t*)0x400260B4)
    #define DMA_S7CR *((uint32_t*)0x400260B8)
    #define DMA_S7NDTR *((uint32_t*)0x400260BC)
    #define DMA_S7PAR *((uint32_t*)0x400260C0)
    #define DMA_S7M0AR *((uint32_t*)0x400260C4)
    #define DMA_S7M1AR *((uint32_t*)0x400260C8)
    #define DMA_S7FCR *((uint32_t*)0x400260CC)


    Читайте больше в категории: Программирование встраиваемых систем

    2016-04-13 19:34:17



    Другие статьи:

    STM32. DMA controller

    Maya. Insert Edge Loop Tool и Lattice

    Физика цвета в живописи

    Java. Создание графических приложений

    Maya. Альфа канал и UV координаты

    STM32. Прерывание на кнопке

    Рисунок. Техники рисования

    STM32. DMA - SPI - акселерометр

    Java. Ввод данных с клавиатуры

    Maya. bend, sine, squash, twist, wave, flare.