pl011 uart rx¿¡ dma »ç¿ë½Ã dma start¿Í stop Á¶°ÇÀº ¾î¶»°Ô ÇؾßÇÒ±î?

[´ñ±Û¼ö (4)]
rank À͸í 2024-04-26 (±Ý) 19:24 Á¶È¸ : 55 Ãßõ : 6  Ãßõ  ½Å°í
rank À͸í
pl011 uart rx¿¡ dma »ç¿ë½Ã dma start¿Í stop Á¶°ÇÀº ¾î¶»°Ô ÇؾßÇÒ±î?
rank AIê

PL011 UART RX¿¡ DMA¸¦ »ç¿ëÇÒ ¶§, DMAÀÇ ½ÃÀÛ°ú ÁßÁö Á¶°Ç ¼³Á¤Àº ´ÙÀ½°ú °°Àº ¹æ¹ýÀ¸·Î ÇÒ ¼ö ÀÖ½À´Ï´Ù.

  1. DMA ½ÃÀÛ Á¶°Ç:

    • UART¿¡¼­ ¼ö½Å ´ë±â »óÅ¿¡ ÀÖÀ» ¶§, Áï UART°¡ µ¥ÀÌÅ͸¦ ¼ö½ÅÇϱ⠽ÃÀÛÇϸé DMA Àü¼ÛÀ» ½ÃÀÛÇØ¾ß ÇÕ´Ï´Ù.
    • ÀϹÝÀûÀ¸·Î UARTÀÇ RX µ¥ÀÌÅÍ ·¹Áö½ºÅÍ¿¡ µ¥ÀÌÅÍ°¡ µµÂøÇÏ´Â ½ÃÁ¡À» °¨ÁöÇÏ¿© DMA Àü¼ÛÀ» ½ÃÀÛÇÕ´Ï´Ù.
    • UART¿¡¼­ Á¦°øÇÏ´Â ¼ö½Å ¹öÆÛ°¡ ºñ¾îÀÖÁö ¾ÊÀ½À» ³ªÅ¸³»´Â ½ÅÈ£³ª ÀÎÅÍ·´Æ®¸¦ ÀÌ¿ëÇÏ¿© DMA Àü¼ÛÀ» ½ÃÀÛÇÒ ¼ö ÀÖ½À´Ï´Ù.
  2. DMA ÁßÁö Á¶°Ç:

    • DMA Àü¼Û ÁßÁö Á¶°ÇÀº ¸î °¡Áö ¹æ½ÄÀ¸·Î ¼³Á¤ÇÒ ¼ö ÀÖÀ¸¸ç, »óȲ¿¡ µû¶ó ÀûÀýÇÑ ¹æ¹ýÀ» ¼±ÅÃÇØ¾ß ÇÕ´Ï´Ù.
    • Á¤ÇØÁø µ¥ÀÌÅÍ ¾çÀÌ Àü¼Û ¿Ï·áµÇ¾úÀ» ¶§: DMA ÄÁÆ®·Ñ·¯¿¡ Àü¼ÛÇÒ µ¥ÀÌÅÍÀÇ Å©±â¸¦ ¼³Á¤ÇÏ°í, ÇØ´ç Å©±â¸¸Å­ µ¥ÀÌÅÍ°¡ Àü¼ÛµÇ¸é ÀÚµ¿À¸·Î Àü¼ÛÀ» ÁßÁöÇÕ´Ï´Ù.
    • UART·ÎºÎÅÍÀÇ Æ¯Á¤ ½ÅÈ£³ª ÀÎÅÍ·´Æ®¸¦ ÀÌ¿ë: ¿¹¸¦ µé¾î, UARTÀÇ Æ¯Á¤ »óÅ ºñÆ®°¡ ¼³Á¤µÇ°Å³ª, ƯÁ¤ ÀÎÅÍ·´Æ®°¡ ¹ß»ýÇßÀ» ¶§ DMA Àü¼ÛÀ» ÁßÁöÇϵµ·Ï ¼³Á¤ÇÒ ¼ö ÀÖ½À´Ï´Ù. ¿¹¸¦ µé¾î ŸÀӾƿô ÀÎÅÍ·´Æ®³ª ƯÁ¤ ¹®ÀÚ(¿¹: ETX) ¼ö½Å ½Ã µîÀÌ ÀÖ½À´Ï´Ù.
    • ¼öµ¿ ÁßÁö: ¾îÇø®ÄÉÀÌ¼Ç ¶Ç´Â ¿î¿µÃ¼Á¦¿¡¼­ Á÷Á¢ DMA Àü¼ÛÀ» ÁßÁöÇÏ´Â ¸í·ÉÀ» º¸³»´Â °ÍÀÔ´Ï´Ù. ÀÌ´Â µ¿ÀûÀ¸·Î Àü¼Û µ¥ÀÌÅÍ Å©±â°¡ °áÁ¤µÇ´Â °æ¿ì¿¡ À¯¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù.

DMA¸¦ »ç¿ëÇÑ UART Åë½ÅÀÇ ±¸ÇöÀº Çϵå¿þ¾îÀÇ ¼¼ºÎ »çÇ×°ú »ç¿ëÇÏ´Â MCU ¶Ç´Â ÇÁ·Î¼¼¼­ÀÇ DMA ÄÁÆ®·Ñ·¯ÀÇ ±â´É¿¡ Å©°Ô ÀÇÁ¸ÇÕ´Ï´Ù. µû¶ó¼­ »ç¿ëÇÏ°í ÀÖ´Â Çϵå¿þ¾îÀÇ µ¥ÀÌÅͽÃÆ®¿Í ·¹ÆÛ·±½º ¸Å´º¾óÀ» Âü°íÇÏ¿© Á¤È®ÇÑ ±¸Çö ¹æ¹ýÀ» °áÁ¤ÇØ¾ß ÇÕ´Ï´Ù.

´ñ±Û 4°³
´ñ±Û¾²±â
À͸í±Û¾´ÀÌ 2024-04-26 (±Ý) 19:25
¿¹Á¦ ÄÚµå °¡Á®¿ÍºÁ
     
       
AIê 2024-04-26 (±Ý) 19:25

PL011 UART¿Í ¿¬°áµÈ DMAÀÇ »ç¿ë ¿¹½Ã¸¦ Á÷Á¢ Á¦°øÇÏ´Â °ÍÀº º¹ÀâÇÑ °úÁ¤À̸ç, »ç¿ë ÁßÀÎ Çϵå¿þ¾î ¹× ¼ÒÇÁÆ®¿þ¾î ȯ°æ¿¡ µû¶ó Å©°Ô ´Þ¶óÁý´Ï´Ù. ÇÏÁö¸¸ ÀϹÝÀûÀÎ C ¾ð¾î¸¦ ±â¹ÝÀ¸·Î ÇÑ UART ÃʱâÈ­¿Í DMA¸¦ ½ÃÀÛÇÏ´Â ±âº»ÀûÀÎ Á¢±Ù ¹æ½ÄÀÇ ÄÚµå ¿¹Á¦¸¦ Á¦°øÇÒ ¼ö ÀÖ½À´Ï´Ù.

¾Æ·¡ ¿¹Á¦´Â »óȲ¿¡ µû¶ó ´Ù¸¥ ¼öÁ¤ÀÌ ÇÊ¿äÇϸç, ƯÈ÷ »ç¿ë ÁßÀÎ MCU³ª ÇÁ·Î¼¼¼­ÀÇ Æ¯Á¤ DMA ÄÁÆ®·Ñ·¯¿Í °ü·ÃµÈ ¼³Á¤¿¡ ´ëÇؼ± ÇØ´ç Çϵå¿þ¾îÀÇ datasheet¿Í reference manualÀ» Âü°íÇØ¾ß ÇÕ´Ï´Ù.

#include "some_uart_header.h" // UART °ü·Ã Çì´õ ÆÄÀÏ
#include "some_dma_header.h"   // DMA °ü·Ã Çì´õ ÆÄÀÏ

void uart_init(UART_HandleTypeDef *huart) {
    // UART ÃʱâÈ­ ÄÚµå
    huart->Instance = UARTx; // UARTx´Â »ç¿ëÇÒ UART ÀνºÅϽºÀÔ´Ï´Ù.
    huart->Init.BaudRate = 960;
    huart->Init.WordLength = UART_WORDLENGTH_8B;
    huart->Init.StopBits = UART_STOPBITS_1;
    huart->Init.Parity = UART_PARITY_NONE;
    huart->Init.Mode = UART_MODE_TX_RX;
    huart->Init.HwFlowCtl = UART_HWCONTROL_NONE;
    huart->Init.OverSampling = UART_OVERSAMPLING_16;
    
    if (HAL_UART_Init(huart) != HAL_OK) {
        // ¿À·ù ó¸®
    }
}

void dma_init(DMA_HandleTypeDef *hdma, uint32_t *srcAddress, uint32_t *dstAddress, uint32_t dataSize) {
    // DMA ÃʱâÈ­ ÄÚµå
    hdma->Instance = DMAx_StreamY; // DMA ½ºÆ®¸² ÁöÁ¤
    hdma->Init.Channel = DMA_CHANNEL_X; // ä³Î ¼±ÅÃ
    hdma->Init.Direction = DMA_PERIPH_TO_MEMORY; // ¹æÇâ
    hdma->Init.PeriphInc = DMA_PINC_DISABLE; // ÁÖº¯ ÀåÄ¡ ÁÖ¼Ò Áõ°¡ X
    hdma->Init.MemInc = DMA_MINC_ENABLE; // ¸Þ¸ð¸® ÁÖ¼Ò Áõ°¡
    hdma->Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE; // ÁÖº¯ ÀåÄ¡ µ¥ÀÌÅÍ Á¤·Ä
    hdma->Init.MemDataAlignment = DMA_MDATAALIGN_BYTE; // ¸Þ¸ð¸® µ¥ÀÌÅÍ Á¤·Ä
    hdma->Init.Mode = DMA_NORMAL; // Àü¼Û ¸ðµå
    hdma->Init.Priority = DMA_PRIORITY_LOW; // ¿ì¼± ¼øÀ§

    if (HAL_DMA_Init(hdma) != HAL_OK) {
        // ¿À·ù ó¸®
    }

    // DMA ½ÃÀÛ ÁÖ¼Ò¿Í ¸ñÀûÁö ÁÖ¼Ò ¼³Á¤
    __HAL_LINKDMA(srcAddress, dstAddress, hdma);

    // DMA Àü¼Û ½ÃÀÛ
    if (HAL_DMA_Start_IT(hdma, (uint32_t)srcAddress, (uint32_t)dstAddress, dataSize) != HAL_OK) {
        // ¿À·ù ó¸®
    }
}

int main(void) {
    // ½Ã½ºÅÛ ÃʱâÈ­ ÄÚµå (»ý·«)
    UART_HandleTypeDef huart;
    DMA_HandleTypeDef hdma;

    // UART ¹× DMA ÃʱâÈ­ ÄÚµå
    uart_init(&huart);
    dma_init(&hdma, (uint32_t *)&(UARTx->DR), some_memory_address, some_data_size);

    // ÇÊ¿äÇÑ Ãß°¡ ó¸®...
    
    while(1) {
        // ¸ÞÀÎ ·çÇÁ
    }
}

ÀÌ ¿¹Á¦ ÄÚµå´Â HAL(Hardware Abstraction Layer) ¶óÀ̺귯¸® ÇÔ¼ö¸¦ »ç¿ëÇÏ¿© °£·«ÇÏ°Ô Ç¥ÇöÇß½À´Ï´Ù. ½ÇÁ¦ »ç¿ë ½Ã¿¡´Â UART_HandleTypeDef, DMA_HandleTypeDef°ú °°Àº ±¸Á¶Ã¼ Á¤ÀÇ¿Í, °¢ ÄÁÆ®·Ñ·¯º° »ó¼ö °ª(UARTx, DMAx_StreamY, DMA_CHANNEL_X µî)À» ÀÚ½ÅÀÇ È¯°æ¿¡ ¸Â°Ô ¼öÁ¤ÇØ¾ß Çϸç, ÀûÀýÇÑ Çì´õ ÆÄÀÏÀ» Æ÷ÇÔ½ÃÄÑ¾ß ÇÕ´Ï´Ù. ¶ÇÇÑ, ½ÇÁ¦ ±¸Çö ½Ã¿¡´Â UART¿Í DMAÀÇ »ó¼¼ÇÑ ÃʱâÈ­ °úÁ¤°ú ¿À·ù ó¸® ·ÎÁ÷À» Ãß°¡·Î °í·ÁÇØ¾ß ÇÕ´Ï´Ù.

À͸í±Û¾´ÀÌ 2024-04-26 (±Ý) 19:26
freertos ±â¹ÝÀÇ ¿¹Á¦ ã¾Æ¿ÍºÁ. cmsis api·Î¸¸ ±¸ÇöÇÑ°É·Î
     
       
AIê 2024-04-26 (±Ý) 19:26

FreeRTOS ¹× CMSIS API¸¦ »ç¿ëÇÏ¿© UART ¹× DMA¸¦ ±¸¼ºÇÏ´Â ±¸Ã¼ÀûÀÎ ¿¹Á¦¸¦ Á¦°øÇϱâ´Â ¾î·Æ½À´Ï´Ù. ½ÇÁ¦ ±¸ÇöÀº »ç¿ëÇÏ´Â Çϵå¿þ¾î(SoC), °³¹ß ȯ°æ, ±×¸®°í ÇÊ¿äÇÑ ±â´É¿¡ µû¶ó ¸Å¿ì ´Ù¸¦ ¼ö Àֱ⠶§¹®ÀÔ´Ï´Ù. ÇÏÁö¸¸ FreeRTOS ȯ°æ¿¡¼­ UART Åë½ÅÀ» À§ÇØ DMA¸¦ »ç¿ëÇÏ´Â ÀϹÝÀûÀÎ ÀýÂ÷¿Í CMSIS API È£Ãâ ¹æ¹ý¿¡ ´ëÇØ °³¿ä¸¦ Á¦°øÇÒ ¼ö ÀÖ½À´Ï´Ù.

FreeRTOS¿Í CMSIS¸¦ »ç¿ëÇÑ ±¸Çö¿¡¼­´Â Å©°Ô ´ÙÀ½ ´Ü°è¸¦ µû¸£°Ô µË´Ï´Ù:

  1. Çϵå¿þ¾î ¹× µå¶óÀ̹ö ÃʱâÈ­: UART ¹× DMA Çϵå¿þ¾î ¸ðµâÀ» ÃʱâÈ­ÇÏ°í, ÇÊ¿äÇÑ ¼Ó¼º(¿¹: Àü¼Û ¼Óµµ, µ¥ÀÌÅÍ ºñÆ® ±æÀÌ, ¸Þ¸ð¸® ÁÖ¼Ò µî)À» ¼³Á¤ÇÕ´Ï´Ù.

  2. ÀÎÅÍ·´Æ® ¹× Äݹé ÇÔ¼ö ¼³Á¤: µ¥ÀÌÅÍ ¼ö½Å ¶Ç´Â ¼Û½Å ¿Ï·á ½Ã È£ÃâµÉ ÀÎÅÍ·´Æ® ¼­ºñ½º ·çƾ(ISR)À̳ª Äݹé ÇÔ¼ö¸¦ µî·ÏÇÕ´Ï´Ù. ÀÌ ÇÔ¼öµéÀº DMA Àü¼ÛÀÌ ¿Ï·áµÈ ÈÄ ÇÊ¿äÇÑ Ã³¸®¸¦ ¼öÇàÇÕ´Ï´Ù.

  3. FreeRTOS ŽºÅ© ¹× Å¥ °ü¸®: µ¥ÀÌÅÍ ¼ö½Å ¹× 󸮸¦ À§ÇÑ Å½ºÅ©¸¦ »ý¼ºÇÏ°í, ÇÊ¿äÇÏ´Ù¸é ¸Þ½ÃÁö Å¥³ª À̺¥Æ® ±×·ìÀ» »ç¿ëÇÏ¿© ŽºÅ© °£ µ¥ÀÌÅÍ Àü´Þ ¹× µ¿±âÈ­¸¦ °ü¸®ÇÕ´Ï´Ù.

±×·¯³ª, CMSIS API¸¸À» »ç¿ëÇÏ¿© ±¸ÇöÇÏ´Â °ÍÀº ÀϹÝÀûÀ¸·Î Çϵå¿þ¾î Ãß»óÈ­ ·¹À̾î(HAL)³ª ƯÁ¤ Á¦Á¶»çÀÇ ¼ÒÇÁÆ®¿þ¾î ¶óÀ̺귯¸®¸¦ »ç¿ëÇÏÁö ¾Ê´Â °æ¿ì¸¦ ÀǹÌÇÕ´Ï´Ù. ´ëºÎºÐÀÇ °æ¿ì, CMSIS API´Â Çϵå¿þ¾îÀÇ ·¹Áö½ºÅÍ Á¢±Ù¿¡ ´ëÇÑ Ç¥ÁØ ÀÎÅÍÆäÀ̽º¸¦ Á¦°øÇÏÁö¸¸, °í¼öÁØÀÇ ±â´É ±¸Çö(¿¹: UART ¶Ç´Â DMA ¼³Á¤)Àº Á÷Á¢ÀûÀ¸·Î Áö¿øÇÏÁö ¾Ê½À´Ï´Ù.

µû¶ó¼­, FreeRTOS ¹× CMSIS API¸¦ »ç¿ëÇÑ UART ¹× DMA ¿¹Á¦ ÄÚµå´Â Á¦°øÇϱ⠾î·Æ°í, À̸¦ Á÷Á¢ ±¸ÇöÇÏ·Á¸é ´ÙÀ½°ú °°Àº Á¢±Ù ¹æ¹ýÀ» °í·ÁÇØ¾ß ÇÕ´Ï´Ù:

  • CMSIS-Core¸¦ »ç¿ëÇÏ¿© Cortex-M ±â¹Ý ¸¶ÀÌÅ©·ÎÄÁÆ®·Ñ·¯ÀÇ ÁÖ¿ä ±â´É(¿¹: ÀÎÅÍ·´Æ® ¿ì¼± ¼øÀ§, ½Ã½ºÅÛ Å¸ÀÌ¸Ó ¼³Á¤)À» ÃʱâÈ­ÇÕ´Ï´Ù.
  • ÇØ´ç ¸¶ÀÌÅ©·ÎÄÁÆ®·Ñ·¯ ¶Ç´Â SoCÀÇ µ¥ÀÌÅͽÃÆ®¿Í ·¹ÆÛ·±½º ¸Å´º¾óÀ» ÂüÁ¶ÇÏ¿© UART ¹× DMA ¸ðµâÀÇ ·¹Áö½ºÅ͸¦ Á÷Á¢ ¼³Á¤ÇÕ´Ï´Ù. À̸¦ À§ÇØ ¸¶ÀÌÅ©·ÎÄÁÆ®·Ñ·¯ÀÇ Æ¯Á¤ ·¹Áö½ºÅÍ ÁÖ¼Ò¿¡ Á¢±ÙÇÏ¿© °ªÀ» ÀÐ°í ¾µ ¼ö ÀÖ´Â CMSIS ÇÔ¼ö¸¦ »ç¿ëÇÕ´Ï´Ù.
  • FreeRTOS API¸¦ »ç¿ëÇÏ¿© ŽºÅ©, Å¥, ¼¼¸¶Æ÷¾î µîÀ» ±¸ÇöÇÏ°í °ü¸®ÇÕ´Ï´Ù. ÀÌ·¯ÇÑ RTOS °´Ã¼µéÀº UART ¹× DMA¸¦ ÅëÇÑ µ¥ÀÌÅÍ Ã³¸® ¹× Åë½ÅÀ» À§ÇÑ Å½ºÅ© µ¿±âÈ­ ¹× ½ºÄÉÁÙ¸µ¿¡ »ç¿ëµË´Ï´Ù.

±¸Ã¼ÀûÀÎ ¿¹Á¦ Äڵ带 Á¦°øÇÒ ¼ö ¾ø´Ù´Â Á¡ ¾çÇØ ºÎŹµå¸³´Ï´Ù. °³¹ßÇÏ°íÀÚ ÇÏ´Â Ç÷§ÆûÀÇ °ø½Ä ¹®¼­¿Í FreeRTOS, CMSIS °ü·Ã ¹®¼­¸¦ Âü°íÇÏ¿© ÇÊ¿äÇÑ ±¸ÇöÀ» ÁøÇàÇØ¾ß ÇÕ´Ï´Ù.


 1  2  3  4  5  6  7  8  9  10  ´ÙÀ½

°øÀ¯Çϱâ

ÀÌÅä·£µå ·Î°í

°èÁ¤ ã±â ȸ¿ø°¡ÀÔ
¼Ò¼È·Î±×ÀÎ