/** ****************************************************************************** * @file fm33a0xxev_dma.h * @author FM33A0XXEV Application Team * @version V1.0.0 * @date 16-April-2020 * @brief This file contains all the functions prototypes for the DMA firmware library. ****************************************************************************** */ /* Define to prevent recursive inclusion -------------------------------------*/ #ifndef __FM33A0XXEV_DMA_H #define __FM33A0XXEV_DMA_H #ifdef __cplusplus extern "C" { #endif /* Includes ------------------------------------------------------------------*/ #include "FM33A0XXEV.h" typedef enum { DMA_CH0 = 0, DMA_CH1 = 1, DMA_CH2 = 2, DMA_CH3 = 3, DMA_CH4 = 4, DMA_CH5 = 5, DMA_CH6 = 6, DMA_CH7 = 7, DMA_CH8 = 8, DMA_CH9 = 9, DMA_CH10 = 10, DMA_CH11 = 11 }DMA_CH_Type; typedef struct { DMA_CH_Type CHx; //DMAͨµÀºÅ uint32_t CHxTSIZE; //ͨµÀ´«Ê䳤¶È uint32_t CHxPRI; //ͨµÀÓÅÏȼ¶ uint32_t CHxINC; //CH0~CH10ͨµÀµØÖ·Ôö³¤·½Ïò,CH11ÎÞÒâÒå uint32_t CHxSSEL; //CH0~CH10ÍâÉèͨµÀÑ¡Ôñ,CH11´«Ê䷽ʽѡÔñ uint32_t CHxDIR; //CH0~CH10ͨµÀ´«Êä·½Ïò uint32_t CHxBDW; //CH0~CH10ͨµÀ´«Êä´ø¿í FunState CHxCICR; //CH0~CH10Ñ­»·»º³åģʽ FunState CHxFTIE; //ͨµÀ´«ÊäÍê³ÉÖжÏʹÄÜ FunState CHxHTIE; //ͨµÀ´«Êä°ë³ÌÖжÏʹÄÜ FunState CHxEN; //ͨµÀʹÄÜ uint32_t CHxRAMAD; //CH0~CH11ͨµÀRAMÖ¸ÕëµØÖ·,×¢ÒâCH11ʹÓõÄÊÇwordµØÖ·£¬Çý¶¯ÀïÒÑ´¦Àí¹ýÁË£¬ uint32_t CH11RI; // RAMµØÖ·Ôö³¤·½Ïò(½öFlashµ½RAMÓÐЧ) uint32_t CH11FI; // FLSµØÖ·Ôö³¤·½Ïò(½öFlashµ½RAMÓÐЧ) uint32_t CH11FLSAD; //ͨµÀFLASHÖ¸ÕëµØÖ·£¬½öÕë¶ÔͨµÀ11ÓÐÒâÒå }DMA_InitTypeDef; #define DMA_GCR_DMA_ADDRERR_EN_Pos 1 /* DMA´íÎóµØÖ·ÖжÏʹÄÜ 1£ºÔÊÐí´íÎóµØÖ·ÖÐ¶Ï 0£º½ûÖ¹´íÎóµØÖ·ÖÐ¶Ï */ #define DMA_GCR_DMA_ADDRERR_EN_Msk (0x1U << DMA_GCR_DMA_ADDRERR_EN_Pos) #define DMA_GCR_DMAEN_Pos 0 /* DMAÈ«¾ÖʹÄÜ 1£ºDMAʹÄÜ 0£ºDMA¹Ø±Õ */ #define DMA_GCR_DMAEN_Msk (0x1U << DMA_GCR_DMAEN_Pos) #define DMA_CHxCR_CHxTSIZE_Pos 16 /* Channelx´«Ê䳤¶È£¬1-8192´Î´«Êä */ #define DMA_CHxCR_CHxTSIZE_Msk (0x1fffU << DMA_CHxCR_CHxTSIZE_Pos) #define DMA_CHxCR_CHxPRI_Pos 12 /* ChannelxÓÅÏȼ¶ 00£ºLow 01£ºMedium 10£ºHigh 11£ºVery High */ #define DMA_CHxCR_CHxPRI_Msk (0x3U << DMA_CHxCR_CHxPRI_Pos) #define DMA_CHxCR_CHxPRI_LOW (0x0U << DMA_CHxCR_CHxPRI_Pos) /* Low */ #define DMA_CHxCR_CHxPRI_MEDIUM (0x1U << DMA_CHxCR_CHxPRI_Pos) /* Medium */ #define DMA_CHxCR_CHxPRI_HIGH (0x2U << DMA_CHxCR_CHxPRI_Pos) /* High */ #define DMA_CHxCR_CHxPRI_VERY_HIGH (0x3U << DMA_CHxCR_CHxPRI_Pos) /* Very High */ #define DMA_CHxCR_CHxINC_Pos 11 /* RAMµØÖ·Ôö¼õÉèÖà 1£ºRAMµØÖ·µÝÔö 0£ºRAMµØÖ·µÝ¼õ */ #define DMA_CHxCR_CHxINC_Msk (0x1U << DMA_CHxCR_CHxINC_Pos) #define DMA_CHxCR_CHxINC_INCREASE (0x1U << DMA_CHxCR_CHxINC_Pos) /* RAMµØÖ·µÝÔö */ #define DMA_CHxCR_CHxINC_DECREASE (0x0U << DMA_CHxCR_CHxINC_Pos) /* RAMµØÖ·µÝ¼õ */ #define DMA_CHxCR_CHxSSEL_Pos 8 /* ChannelxÍâÉèÇëÇóÓ³Éä ÿ¸öͨµÀ¿ÉÒÔ½ÓÊÜ8¸öÍâÉèÇëÇó£¬ÍâÉèÇëÇóµÄÓ³Éä²Î¼û23.6.1DMAÇëÇóÓ³Éä */ #define DMA_CHxCR_CHxSSEL_Msk (0x7U << DMA_CHxCR_CHxSSEL_Pos) #define DMA_CHxCR_CH0SSEL_ADC (0x0U << DMA_CHxCR_CHxSSEL_Pos) #define DMA_CHxCR_CH0SSEL_SPI3_RX (0x1U << DMA_CHxCR_CHxSSEL_Pos) #define DMA_CHxCR_CH0SSEL_LPUART0_RX (0x2U << DMA_CHxCR_CHxSSEL_Pos) #define DMA_CHxCR_CH0SSEL_LPUART1_RX (0x3U << DMA_CHxCR_CHxSSEL_Pos) #define DMA_CHxCR_CH0SSEL_UART2_RX (0x4U << DMA_CHxCR_CHxSSEL_Pos) #define DMA_CHxCR_CH0SSEL_UART4_RX (0x5U << DMA_CHxCR_CHxSSEL_Pos) #define DMA_CHxCR_CH0SSEL_AES_IN (0x6U << DMA_CHxCR_CHxSSEL_Pos) #define DMA_CHxCR_CH0SSEL_QSPI (0x7U << DMA_CHxCR_CHxSSEL_Pos) #define DMA_CHxCR_CH1SSEL_ADC (0x0U << DMA_CHxCR_CHxSSEL_Pos) #define DMA_CHxCR_CH1SSEL_SPI0_RX (0x1U << DMA_CHxCR_CHxSSEL_Pos) #define DMA_CHxCR_CH1SSEL_SPI2_RX (0x2U << DMA_CHxCR_CHxSSEL_Pos) #define DMA_CHxCR_CH1SSEL_SPI3_TX (0x3U << DMA_CHxCR_CHxSSEL_Pos) #define DMA_CHxCR_CH1SSEL_UART0_RX (0x4U << DMA_CHxCR_CHxSSEL_Pos) #define DMA_CHxCR_CH1SSEL_UART2_TX (0x5U << DMA_CHxCR_CHxSSEL_Pos) #define DMA_CHxCR_CH1SSEL_UART3_RX (0x6U << DMA_CHxCR_CHxSSEL_Pos) #define DMA_CHxCR_CH1SSEL_U7816_RX (0x7U << DMA_CHxCR_CHxSSEL_Pos) #define DMA_CHxCR_CH2SSEL_SPI0_TX (0x0U << DMA_CHxCR_CHxSSEL_Pos) #define DMA_CHxCR_CH2SSEL_SPI2_TX (0x1U << DMA_CHxCR_CHxSSEL_Pos) #define DMA_CHxCR_CH2SSEL_SPI4_RX (0x2U << DMA_CHxCR_CHxSSEL_Pos) #define DMA_CHxCR_CH2SSEL_UART0_TX (0x3U << DMA_CHxCR_CHxSSEL_Pos) #define DMA_CHxCR_CH2SSEL_UART3_TX (0x4U << DMA_CHxCR_CHxSSEL_Pos) #define DMA_CHxCR_CH2SSEL_UART5_RX (0x5U << DMA_CHxCR_CHxSSEL_Pos) #define DMA_CHxCR_CH2SSEL_U7816_TX (0x6U << DMA_CHxCR_CHxSSEL_Pos) #define DMA_CHxCR_CH2SSEL_AES_OUT (0x7U << DMA_CHxCR_CHxSSEL_Pos) #define DMA_CHxCR_CH3SSEL_SPI1_RX (0x0U << DMA_CHxCR_CHxSSEL_Pos) #define DMA_CHxCR_CH3SSEL_SPI4_TX (0x1U << DMA_CHxCR_CHxSSEL_Pos) #define DMA_CHxCR_CH3SSEL_LPUART0_RX (0x2U << DMA_CHxCR_CHxSSEL_Pos) #define DMA_CHxCR_CH3SSEL_UART1_RX (0x3U << DMA_CHxCR_CHxSSEL_Pos) #define DMA_CHxCR_CH3SSEL_UART4_RX (0x4U << DMA_CHxCR_CHxSSEL_Pos) #define DMA_CHxCR_CH3SSEL_UART5_TX (0x5U << DMA_CHxCR_CHxSSEL_Pos) #define DMA_CHxCR_CH3SSEL_I2C0_TX (0x6U << DMA_CHxCR_CHxSSEL_Pos) #define DMA_CHxCR_CH3SSEL_AES_IN (0x7U << DMA_CHxCR_CHxSSEL_Pos) #define DMA_CHxCR_CH4SSEL_SPI1_TX (0x0U << DMA_CHxCR_CHxSSEL_Pos) #define DMA_CHxCR_CH4SSEL_SPI3_RX (0x1U << DMA_CHxCR_CHxSSEL_Pos) #define DMA_CHxCR_CH4SSEL_LPUART0_TX (0x2U << DMA_CHxCR_CHxSSEL_Pos) #define DMA_CHxCR_CH4SSEL_UART1_TX (0x3U << DMA_CHxCR_CHxSSEL_Pos) #define DMA_CHxCR_CH4SSEL_UART2_RX (0x4U << DMA_CHxCR_CHxSSEL_Pos) #define DMA_CHxCR_CH4SSEL_UART4_TX (0x5U << DMA_CHxCR_CHxSSEL_Pos) #define DMA_CHxCR_CH4SSEL_I2C0_RX (0x6U << DMA_CHxCR_CHxSSEL_Pos) #define DMA_CHxCR_CH4SSEL_AES_OUT (0x7U << DMA_CHxCR_CHxSSEL_Pos) #define DMA_CHxCR_CH5SSEL_SPI0_RX (0x0U << DMA_CHxCR_CHxSSEL_Pos) #define DMA_CHxCR_CH5SSEL_SPI2_RX (0x1U << DMA_CHxCR_CHxSSEL_Pos) #define DMA_CHxCR_CH5SSEL_LPUART1_RX (0x2U << DMA_CHxCR_CHxSSEL_Pos) #define DMA_CHxCR_CH5SSEL_UART1_RX (0x3U << DMA_CHxCR_CHxSSEL_Pos) #define DMA_CHxCR_CH5SSEL_UART2_TX (0x4U << DMA_CHxCR_CHxSSEL_Pos) #define DMA_CHxCR_CH5SSEL_UART3_RX (0x5U << DMA_CHxCR_CHxSSEL_Pos) #define DMA_CHxCR_CH5SSEL_UART5_RX (0x6U << DMA_CHxCR_CHxSSEL_Pos) #define DMA_CHxCR_CH5SSEL_I2C1_TX (0x7U << DMA_CHxCR_CHxSSEL_Pos) #define DMA_CHxCR_CH6SSEL_SPI0_TX (0x0U << DMA_CHxCR_CHxSSEL_Pos) #define DMA_CHxCR_CH6SSEL_SPI2_TX (0x1U << DMA_CHxCR_CHxSSEL_Pos) #define DMA_CHxCR_CH6SSEL_LPUART1_TX (0x2U << DMA_CHxCR_CHxSSEL_Pos) #define DMA_CHxCR_CH6SSEL_UART1_TX (0x3U << DMA_CHxCR_CHxSSEL_Pos) #define DMA_CHxCR_CH6SSEL_UART3_TX (0x4U << DMA_CHxCR_CHxSSEL_Pos) #define DMA_CHxCR_CH6SSEL_UART5_TX (0x5U << DMA_CHxCR_CHxSSEL_Pos) #define DMA_CHxCR_CH6SSEL_I2C1_RX (0x6U << DMA_CHxCR_CHxSSEL_Pos) #define DMA_CHxCR_CH6SSEL_CRC (0x7U << DMA_CHxCR_CHxSSEL_Pos) #define DMA_CHxCR_CH7SSEL_ADC (0x0U << DMA_CHxCR_CHxSSEL_Pos) #define DMA_CHxCR_CH7SSEL_SPI1_RX (0x1U << DMA_CHxCR_CHxSSEL_Pos) #define DMA_CHxCR_CH7SSEL_SPI3_RX (0x2U << DMA_CHxCR_CHxSSEL_Pos) #define DMA_CHxCR_CH7SSEL_LPUART0_RX (0x3U << DMA_CHxCR_CHxSSEL_Pos) #define DMA_CHxCR_CH7SSEL_UART0_RX (0x4U << DMA_CHxCR_CHxSSEL_Pos) #define DMA_CHxCR_CH7SSEL_UART2_RX (0x5U << DMA_CHxCR_CHxSSEL_Pos) #define DMA_CHxCR_CH7SSEL_UART4_RX (0x6U << DMA_CHxCR_CHxSSEL_Pos) #define DMA_CHxCR_CH7SSEL_QSPI (0x7U << DMA_CHxCR_CHxSSEL_Pos) #define DMA_CHxCR_CH8SSEL_ADC (0x0U << DMA_CHxCR_CHxSSEL_Pos) #define DMA_CHxCR_CH8SSEL_SPI1_TX (0x1U << DMA_CHxCR_CHxSSEL_Pos) #define DMA_CHxCR_CH8SSEL_SPI2_RX (0x2U << DMA_CHxCR_CHxSSEL_Pos) #define DMA_CHxCR_CH8SSEL_SPI3_TX (0x3U << DMA_CHxCR_CHxSSEL_Pos) #define DMA_CHxCR_CH8SSEL_LPUART0_TX (0x4U << DMA_CHxCR_CHxSSEL_Pos) #define DMA_CHxCR_CH8SSEL_UART0_TX (0x5U << DMA_CHxCR_CHxSSEL_Pos) #define DMA_CHxCR_CH8SSEL_UART2_TX (0x6U << DMA_CHxCR_CHxSSEL_Pos) #define DMA_CHxCR_CH8SSEL_UART4_TX (0x7U << DMA_CHxCR_CHxSSEL_Pos) #define DMA_CHxCR_CH9SSEL_SPI0_RX (0x0U << DMA_CHxCR_CHxSSEL_Pos) #define DMA_CHxCR_CH9SSEL_SPI2_TX (0x1U << DMA_CHxCR_CHxSSEL_Pos) #define DMA_CHxCR_CH9SSEL_SPI4_RX (0x2U << DMA_CHxCR_CHxSSEL_Pos) #define DMA_CHxCR_CH9SSEL_LPUART1_RX (0x3U << DMA_CHxCR_CHxSSEL_Pos) #define DMA_CHxCR_CH9SSEL_UART1_RX (0x4U << DMA_CHxCR_CHxSSEL_Pos) #define DMA_CHxCR_CH9SSEL_UART3_RX (0x5U << DMA_CHxCR_CHxSSEL_Pos) #define DMA_CHxCR_CH9SSEL_UART5_RX (0x6U << DMA_CHxCR_CHxSSEL_Pos) #define DMA_CHxCR_CH9SSEL_I2C0_TX (0x7U << DMA_CHxCR_CHxSSEL_Pos) #define DMA_CHxCR_CH10SSEL_SPI0_TX (0x0U << DMA_CHxCR_CHxSSEL_Pos) #define DMA_CHxCR_CH10SSEL_SPI4_TX (0x1U << DMA_CHxCR_CHxSSEL_Pos) #define DMA_CHxCR_CH10SSEL_LPUART1_TX (0x2U << DMA_CHxCR_CHxSSEL_Pos) #define DMA_CHxCR_CH10SSEL_UART1_TX (0x3U << DMA_CHxCR_CHxSSEL_Pos) #define DMA_CHxCR_CH10SSEL_UART3_TX (0x4U << DMA_CHxCR_CHxSSEL_Pos) #define DMA_CHxCR_CH10SSEL_UART5_TX (0x5U << DMA_CHxCR_CHxSSEL_Pos) #define DMA_CHxCR_CH10SSEL_I2C0_RX (0x6U << DMA_CHxCR_CHxSSEL_Pos) #define DMA_CHxCR_CH10SSEL_CRC (0x7U << DMA_CHxCR_CHxSSEL_Pos) #define DMA_CHxCR_CIRC_UPD_Pos 7 /* Ñ­»·»º³åģʽÏÂ×Ô¶¯¸üд«Êä²ÎÊý£¬±¾ÂÖ´«ÊäÍê³Éºó½«shadow¼Ä´æÆ÷ÄÚÈݸ´ÖƵ½¿ØÖƼĴæÆ÷ 0£º½ûÖ¹×Ô¶¯¸üР1£ºÊ¹ÄÜ×Ô¶¯¸üРעÒ⣺½öͨµÀ0~6Ö§³Ö´Ë¹¦ÄÜ£¬Í¨µÀ7~10Î޴˼ĴæÆ÷ */ #define DMA_CHxCR_CIRC_UPD_Msk (0x1U << DMA_CHxCR_CIRC_UPD_Pos) /* ½ûÖ¹×Ô¶¯¸üР*/ /* ʹÄÜ×Ô¶¯¸üР*/ /* ½öͨµÀ0~6Ö§³Ö´Ë¹¦ÄÜ£¬Í¨µÀ7~10Î޴˼ĴæÆ÷ */ #define DMA_CHxCR_DIR_Pos 6 /* ͨµÀ´«Êä·½Ïò 0£º´ÓÍâÉè¶ÁÈ¡Êý¾ÝдÈëRAM 1£º´ÓRAM¶ÁÈ¡Êý¾ÝдÈëÍâÉè */ #define DMA_CHxCR_DIR_Msk (0x1U << DMA_CHxCR_DIR_Pos) #define DMA_CHxCR_DIR_TO_RAM (0x0U << DMA_CHxCR_DIR_Pos) /* ´ÓÍâÉè¶ÁÈ¡Êý¾ÝдÈëRAM */ #define DMA_CHxCR_DIR_TO_PER (0x1U << DMA_CHxCR_DIR_Pos) /* ´ÓRAM¶ÁÈ¡Êý¾ÝдÈëÍâÉè */ #define DMA_CHxCR_BDW_Pos 4 /* ´«Êä´ø¿íÉèÖà 00£º×Ö½Ú£¬8bit 01£º°ë×Ö£¬16bit 10£º×Ö£¬32bit 11£ºRFU */ #define DMA_CHxCR_BDW_Msk (0x3U << DMA_CHxCR_BDW_Pos) #define DMA_CHxCR_BDW_8BITS (0x0U << DMA_CHxCR_BDW_Pos) /* ×Ö½Ú£¬8bit */ #define DMA_CHxCR_BDW_16BITS (0x1U << DMA_CHxCR_BDW_Pos) /* °ë×Ö£¬16bit */ #define DMA_CHxCR_BDW_32BITS (0x2U << DMA_CHxCR_BDW_Pos) /* ×Ö£¬32bit */ #define DMA_CHxCR_CIRC_Pos 3 /* Ñ­»·»º³åģʽ 0£º¹Ø±ÕÑ­»·Ä£Ê½ 1£ºÊ¹ÄÜÑ­»·Ä£Ê½ */ #define DMA_CHxCR_CIRC_Msk (0x1U << DMA_CHxCR_CIRC_Pos) /* ¹Ø±ÕÑ­»·Ä£Ê½ */ /* ʹÄÜÑ­»·Ä£Ê½ */ #define DMA_CHxCR_CHxFTIE_Pos 2 /* Channelx´«ÊäÍê³ÉÖжÏʹÄÜ 1£ºÊ¹ÄÜ´«ÊäÍê³ÉÖÐ¶Ï 0£º¹Ø±Õ´«ÊäÍê³ÉÖÐ¶Ï */ #define DMA_CHxCR_CHxFTIE_Msk (0x1U << DMA_CHxCR_CHxFTIE_Pos) /* ʹÄÜ´«ÊäÍê³ÉÖÐ¶Ï */ /* ¹Ø±Õ´«ÊäÍê³ÉÖÐ¶Ï */ #define DMA_CHxCR_CHxHTIE_Pos 1 /* Channelx°ë³Ì´«ÊäÍê³ÉÖжÏʹÄÜ 1£ºÊ¹Äܰë³ÌÖÐ¶Ï 0£º¹Ø±Õ°ë³ÌÖÐ¶Ï */ #define DMA_CHxCR_CHxHTIE_Msk (0x1U << DMA_CHxCR_CHxHTIE_Pos) /* ʹÄܰë³ÌÖÐ¶Ï */ /* ¹Ø±Õ°ë³ÌÖÐ¶Ï */ #define DMA_CHxCR_ChxEN_Pos 0 /* ChannelxʹÄÜ 1£ºÆô¶¯Í¨µÀ0 0£º¹Ø±ÕͨµÀ0 */ #define DMA_CHxCR_ChxEN_Msk (0x1U << DMA_CHxCR_ChxEN_Pos) /* Æô¶¯Í¨µÀ0 */ /* ¹Ø±ÕͨµÀ0 */ #define DMA_CHxMAR_CHxMEMAD_Pos 0 /* Channelx´æ´¢Æ÷Ö¸ÕëµØÖ·£¬DMA´«ÊäÆô¶¯Ç°Èí¼þÏò´Ë¼Ä´æÆ÷дÈë´æ´¢Æ÷Ä¿±êµØÖ·¡£ µ±Ö¸ÕëÖ¸Ïò¿ÕµØÖ·Ê±£¬DMA·ÃÎʽ«´¥·¢hardfault µ±Ö¸ÕëÖ¸ÏòFlashʱ£¬½ûÖ¹ÏòFlashдÈëÊý¾Ý¡£ Èí¼þ¿ÉÒÔ²éѯµ±Ç°DMA´«ÊäµÄÄ¿±ê´æ´¢Æ÷µØÖ·¡£ ×¢Ò⣺´ËÖ¸Õë½ûÖ¹Ö¸Ïò0x00080000~0x1FFFFFFFµØÖ·£¬Õâ¶ÎµØÖ·Îªflash±£ÁôÐÅÏ¢Çø£¬Ö¸ÏòÕâ¶ÎµØÖ·¿ÉÄÜÔÚDMA·ÃÎÊÖе¼Ö²»¿ÉÔ¤¼ÆµÄ½á¹û */ #define DMA_CHxMAR_CHxMEMAD_Msk (0xffffffffU << DMA_CHxMAR_CHxMEMAD_Pos) #define DMA_CH11CR_CH11TSIZE_Pos 16 /* Channel11´«Ê䳤¶È£¬1-8192´Î´«Ê䣬½öÔÚFlash->RAM´«ÊäʱÓÐЧ£¬RAM->Flash´«ÊäΪ¹Ì¶¨³¤¶È64´Î´«Êä */ #define DMA_CH11CR_CH11TSIZE_Msk (0x1fffU << DMA_CH11CR_CH11TSIZE_Pos) #define DMA_CH11CR_CH11PRI_Pos 12 /* Channel11ÓÅÏȼ¶ 00£ºLow 01£ºMedium 10£ºHigh 11£ºVery High */ #define DMA_CH11CR_CH11PRI_Msk (0x3U << DMA_CH11CR_CH11PRI_Pos) #define DMA_CH11CR_CH11PRI_LOW (0x0U << DMA_CH11CR_CH11PRI_Pos) /* Low */ #define DMA_CH11CR_CH11PRI_MEDIUM (0x1U << DMA_CH11CR_CH11PRI_Pos) /* Medium */ #define DMA_CH11CR_CH11PRI_HIGH (0x2U << DMA_CH11CR_CH11PRI_Pos) /* High */ #define DMA_CH11CR_CH11PRI_VERY_HIGH (0x3U << DMA_CH11CR_CH11PRI_Pos) /* Very High */ #define DMA_CH11CR_CH11DIR_Pos 10 /* Channel11´«Êä·½Ïò 1£ºFlash->RAM´«Êä 0£ºRAM->Flash´«Êä */ #define DMA_CH11CR_CH11DIR_Msk (0x1U << DMA_CH11CR_CH11DIR_Pos) #define DMA_CH11CR_CH11DIR_TO_RAM (0x1U << DMA_CH11CR_CH11DIR_Pos) /* Flash->RAM´«Êä */ #define DMA_CH11CR_CH11DIR_TO_FLASH (0x0U << DMA_CH11CR_CH11DIR_Pos) /* RAM->Flash´«Êä */ #define DMA_CH11CR_CH11RI_Pos 9 /* Channel11 RAMµØÖ·Ôö¼õÉèÖ㬽öÔÚFlash->RAM´«ÊäÖÐÓÐЧ 1£ºRAMµØÖ·µÝÔö 0£ºRAMµØÖ·µÝ¼õ */ #define DMA_CH11CR_CH11RI_Msk (0x1U << DMA_CH11CR_CH11RI_Pos) #define DMA_CH11CR_CH11RI_INCREASE (0x1U << DMA_CH11CR_CH11RI_Pos) /* RAMµØÖ·µÝÔö */ #define DMA_CH11CR_CH11RI_DECREASE (0x0U << DMA_CH11CR_CH11RI_Pos) /* RAMµØÖ·µÝ¼õ */ #define DMA_CH11CR_CH11FI_Pos 8 /* Channel11 FlashµØÖ·Ôö¼õÉèÖ㬽öÔÚFlash->RAM´«ÊäÖÐÓÐЧ 1£ºFlashµØÖ·µÝÔö 0£ºFlashµØÖ·µÝ¼õ */ #define DMA_CH11CR_CH11FI_Msk (0x1U << DMA_CH11CR_CH11FI_Pos) #define DMA_CH11CR_CH11FI_INCREASE (0x1U << DMA_CH11CR_CH11FI_Pos) /* FlashµØÖ·µÝÔö */ #define DMA_CH11CR_CH11FI_DECREASE (0x0U << DMA_CH11CR_CH11FI_Pos) /* FlashµØÖ·µÝ¼õ */ #define DMA_CH11CR_CH11FTIE_Pos 2 /* Channel11´«ÊäÍê³ÉÖжÏʹÄÜ 1£ºÊ¹ÄÜ´«ÊäÍê³ÉÖÐ¶Ï 0£º¹Ø±Õ´«ÊäÍê³ÉÖÐ¶Ï */ #define DMA_CH11CR_CH11FTIE_Msk (0x1U << DMA_CH11CR_CH11FTIE_Pos) /* ʹÄÜ´«ÊäÍê³ÉÖÐ¶Ï */ /* ¹Ø±Õ´«ÊäÍê³ÉÖÐ¶Ï */ #define DMA_CH11CR_CH11HTIE_Pos 1 /* Channel11°ë³Ì´«ÊäÍê³ÉÖжÏʹÄÜ 1£ºÊ¹Äܰë³ÌÖÐ¶Ï 0£º¹Ø±Õ°ë³ÌÖÐ¶Ï */ #define DMA_CH11CR_CH11HTIE_Msk (0x1U << DMA_CH11CR_CH11HTIE_Pos) /* ʹÄܰë³ÌÖÐ¶Ï */ /* ¹Ø±Õ°ë³ÌÖÐ¶Ï */ #define DMA_CH11CR_CH11EN_Pos 0 /* Channel11ʹÄÜ 1£ºÆô¶¯Í¨µÀ0 0£º¹Ø±ÕͨµÀ0 */ #define DMA_CH11CR_CH11EN_Msk (0x1U << DMA_CH11CR_CH11EN_Pos) /* Æô¶¯Í¨µÀ0 */ /* ¹Ø±ÕͨµÀ0 */ #define DMA_CH11FAR_CH11FLSAD_Pos 0 /* Channel11 FlashÖ¸ÕëµØÖ·£¬DMA´«ÊäÆô¶¯Ç°Èí¼þÏò´Ë¼Ä´æÆ÷дÈëFlashÄ¿±êµØÖ·£¬DMAÆô¶¯ºó´Ë¼Ä´æÆ÷ËæDMA´«Êä×ÔÔö»ò×Ô¼õ Èí¼þ¿ÉÒÔ²éѯµ±Ç°DMA´«ÊäµÄÄ¿±êFlashµØÖ· ´Ë¼Ä´æÆ÷µÍ루bit5-0£©½öÔÚFlash->RAM´«ÊäÖÐÓÐЧ£¬RAM->Flash´«ÊäÖÐĬÈÏ¶ÔÆëFlashµÄhalf-sectorÆðʼµØÖ· */ #define DMA_CH11FAR_CH11FLSAD_Msk (0x7fffU << DMA_CH11FAR_CH11FLSAD_Pos) #define DMA_CH11RAR_CH7RAMAD_Pos 0 /* Channel7 RAM×ÖÖ¸ÕëµØÖ·£¬DMA´«ÊäÆô¶¯Ç°Èí¼þÏò´Ë¼Ä´æÆ÷дÈëRAMÄ¿±êµØÖ·£¨wordµØÖ·£©£¬DMAÆô¶¯ºó´Ë¼Ä´æÆ÷ËæDMA´«Êä×ÔÔö»ò×Ô¼õ Èí¼þ¿ÉÒÔ²éѯµ±Ç°DMA´«ÊäµÄÄ¿±êRAMµØÖ· */ #define DMA_CH11RAR_CH7RAMAD_Msk (0x7fffU << DMA_CH11RAR_CH7RAMAD_Pos) #define DMA_ISR_DMA_ADDRERR_Pos 28 /* DMA´«Ê䵨ַ´íÎó±êÖ¾£¬µ±´æ´¢Æ÷Ö¸Õ볬¹ýRAMºÍFlashºÏ·¨µØÖ··¶Î§Ê±ÖÃλ */ #define DMA_ISR_DMA_ADDRERR_Msk (0x1U << DMA_ISR_DMA_ADDRERR_Pos) #define DMA_ISR_DMACHFT_Pos 16 /* DMAͨµÀx´«ÊäÍê³É±êÖ¾£¬Ó²¼þÖÃ룬Èí¼þд1ÇåÁã 1£º¶ÔӦͨµÀ´«ÊäÍê³É 0£º¶ÔӦͨµÀ´«ÊäδÍê³É */ #define DMA_ISR_DMACHFT_Msk (0xfffU << DMA_ISR_DMACHFT_Pos) #define DMA_ISR_DMACHHT_Pos 0 /* DMAͨµÀx´«Êä°ë³Ì±êÖ¾£¬Ó²¼þÖÃ룬Èí¼þд1ÇåÁã */ #define DMA_ISR_DMACHHT_Msk (0xfffU << DMA_ISR_DMACHHT_Pos) #define DMA_CHxCSR_CHxTSIZE_SDW_Pos 16 /* Channelx´«Ê䳤¶Èshadow¼Ä´æÆ÷£»Ñ­»·Ä£Ê½ÏÂÈç¹ûʹÄÜÁËCIRC_UPD¼Ä´æÆ÷£¬ÔòÔÚ±¾ÂÖ´«ÊäÍê³Éºó½«shadow¼Ä´æÆ÷Öµ¸´ÖƵ½CHxTSIZEÖС£ */ #define DMA_CHxCSR_CHxTSIZE_SDW_Msk (0x1fffU << DMA_CHxCSR_CHxTSIZE_SDW_Pos) #define DMA_CHxCSR_CHxINC_SDW_Pos 11 /* RAMµØÖ·Ôö¼õÉèÖÃshadow¼Ä´æÆ÷£¬Ñ­»·Ä£Ê½ÏÂÈç¹ûʹÄÜÁËCIRC_UPD¼Ä´æÆ÷£¬ÔòÔÚ±¾ÂÖ´«ÊäÍê³Éºó½«shadow¼Ä´æÆ÷Öµ¸´ÖƵ½CHxTSIZEÖС£ */ #define DMA_CHxCSR_CHxINC_SDW_Msk (0x1U << DMA_CHxCSR_CHxINC_SDW_Pos) #define DMA_CHxMASR_CHxMAD_SDW_Pos 0 /* Channelx´æ´¢Æ÷Ö¸ÕëµØÖ·Ó°×ӼĴæÆ÷¡£ Ñ­»·Ä£Ê½ÏÂÈç¹ûʹÄÜÁËCIRC_UPD¼Ä´æÆ÷£¬ÔòÔÚ±¾ÂÖ´«ÊäÍê³Éºó½«shadow¼Ä´æÆ÷Öµ¸´ÖƵ½CHxMEMADÖС£ */ #define DMA_CHxMASR_CHxMAD_SDW_Msk (0xffffffffU << DMA_CHxMASR_CHxMAD_SDW_Pos) //Macro_End /* Exported functions --------------------------------------------------------*/ extern void DMA_Deinit(void); /* DMA´íÎóµØÖ·ÖжÏʹÄÜ 1£ºÔÊÐí´íÎóµØÖ·ÖÐ¶Ï 0£º½ûÖ¹´íÎóµØÖ·ÖÐ¶Ï Ïà¹Øº¯Êý */ extern void DMA_GCR_DMA_ADDRERR_EN_Setable(FunState NewState); extern FunState DMA_GCR_DMA_ADDRERR_EN_Getable(void); /* DMAÈ«¾ÖʹÄÜ 1£ºDMAʹÄÜ 0£ºDMA¹Ø±Õ Ïà¹Øº¯Êý */ extern void DMA_GCR_DMAEN_Setable(FunState NewState); extern FunState DMA_GCR_DMAEN_Getable(void); /* Channelx´«Ê䳤¶È£¬1-8192´Î´«Êä Ïà¹Øº¯Êý */ extern void DMA_CHxCR_CHxTSIZE_Set(DMA_CH_Type CHx, uint32_t SetValue); extern uint32_t DMA_CHxCR_CHxTSIZE_Get(DMA_CH_Type CHx); /* ChannelxÓÅÏȼ¶ 00£ºLow 01£ºMedium 10£ºHigh 11£ºVery High Ïà¹Øº¯Êý */ extern void DMA_CHxCR_CHxPRI_Set(DMA_CH_Type CHx, uint32_t SetValue); extern uint32_t DMA_CHxCR_CHxPRI_Get(DMA_CH_Type CHx); /* RAMµØÖ·Ôö¼õÉèÖà 1£ºRAMµØÖ·µÝÔö 0£ºRAMµØÖ·µÝ¼õ Ïà¹Øº¯Êý */ extern void DMA_CHxCR_CHxINC_Set(DMA_CH_Type CHx, uint32_t SetValue); extern uint32_t DMA_CHxCR_CHxINC_Get(DMA_CH_Type CHx); /* ChannelxÍâÉèÇëÇóÓ³Éä ÿ¸öͨµÀ¿ÉÒÔ½ÓÊÜ8¸öÍâÉèÇëÇó£¬ÍâÉèÇëÇóµÄÓ³Éä²Î¼û23.6.1DMAÇëÇóÓ³Éä Ïà¹Øº¯Êý */ extern void DMA_CHxCR_CHxSSEL_Set(DMA_CH_Type CHx, uint32_t SetValue); extern uint32_t DMA_CHxCR_CHxSSEL_Get(DMA_CH_Type CHx); /* Ñ­»·»º³åģʽÏÂ×Ô¶¯¸üд«Êä²ÎÊý£¬±¾ÂÖ´«ÊäÍê³Éºó½«shadow¼Ä´æÆ÷ÄÚÈݸ´ÖƵ½¿ØÖƼĴæÆ÷ 0£º½ûÖ¹×Ô¶¯¸üР1£ºÊ¹ÄÜ×Ô¶¯¸üРעÒ⣺½öͨµÀ0~6Ö§³Ö´Ë¹¦ÄÜ£¬Í¨µÀ7~10Î޴˼ĴæÆ÷ Ïà¹Øº¯Êý */ extern void DMA_CHxCR_CIRC_UPD_Setable(DMA_CH_Type CHx, FunState NewState); extern FunState DMA_CHxCR_CIRC_UPD_Getable(DMA_CH_Type CHx); /* ͨµÀ´«Êä·½Ïò 0£º´ÓÍâÉè¶ÁÈ¡Êý¾ÝдÈëRAM 1£º´ÓRAM¶ÁÈ¡Êý¾ÝдÈëÍâÉè Ïà¹Øº¯Êý */ extern void DMA_CHxCR_DIR_Set(DMA_CH_Type CHx, uint32_t SetValue); extern uint32_t DMA_CHxCR_DIR_Get(DMA_CH_Type CHx); /* ´«Êä´ø¿íÉèÖà 00£º×Ö½Ú£¬8bit 01£º°ë×Ö£¬16bit 10£º×Ö£¬32bit 11£ºRFU Ïà¹Øº¯Êý */ extern void DMA_CHxCR_BDW_Set(DMA_CH_Type CHx, uint32_t SetValue); extern uint32_t DMA_CHxCR_BDW_Get(DMA_CH_Type CHx); /* Ñ­»·»º³åģʽ 0£º¹Ø±ÕÑ­»·Ä£Ê½ 1£ºÊ¹ÄÜÑ­»·Ä£Ê½ Ïà¹Øº¯Êý */ extern void DMA_CHxCR_CIRC_Setable(DMA_CH_Type CHx, FunState NewState); extern FunState DMA_CHxCR_CIRC_Getable(DMA_CH_Type CHx); /* Channelx´«ÊäÍê³ÉÖжÏʹÄÜ 1£ºÊ¹ÄÜ´«ÊäÍê³ÉÖÐ¶Ï 0£º¹Ø±Õ´«ÊäÍê³ÉÖÐ¶Ï Ïà¹Øº¯Êý */ extern void DMA_CHxCR_CHxFTIE_Setable(DMA_CH_Type CHx, FunState NewState); extern FunState DMA_CHxCR_CHxFTIE_Getable(DMA_CH_Type CHx); /* Channelx°ë³Ì´«ÊäÍê³ÉÖжÏʹÄÜ 1£ºÊ¹Äܰë³ÌÖÐ¶Ï 0£º¹Ø±Õ°ë³ÌÖÐ¶Ï Ïà¹Øº¯Êý */ extern void DMA_CHxCR_CHxHTIE_Setable(DMA_CH_Type CHx, FunState NewState); extern FunState DMA_CHxCR_CHxHTIE_Getable(DMA_CH_Type CHx); /* ChannelxʹÄÜ 1£ºÆô¶¯Í¨µÀ0 0£º¹Ø±ÕͨµÀ0 Ïà¹Øº¯Êý */ extern void DMA_CHxCR_ChxEN_Setable(DMA_CH_Type CHx, FunState NewState); extern FunState DMA_CHxCR_ChxEN_Getable(DMA_CH_Type CHx); /* Channelx´æ´¢Æ÷Ö¸ÕëµØÖ·£¬DMA´«ÊäÆô¶¯Ç°Èí¼þÏò´Ë¼Ä´æÆ÷дÈë´æ´¢Æ÷Ä¿±êµØÖ·¡£ µ±Ö¸ÕëÖ¸Ïò¿ÕµØÖ·Ê±£¬DMA·ÃÎʽ«´¥·¢hardfault µ±Ö¸ÕëÖ¸ÏòFlashʱ£¬½ûÖ¹ÏòFlashдÈëÊý¾Ý¡£ Èí¼þ¿ÉÒÔ²éѯµ±Ç°DMA´«ÊäµÄÄ¿±ê´æ´¢Æ÷µØÖ·¡£ ×¢Ò⣺´ËÖ¸Õë½ûÖ¹Ö¸Ïò0x00080000~0x1FFFFFFFµØÖ·£¬Õâ¶ÎµØÖ·Îªflash±£ÁôÐÅÏ¢Çø£¬Ö¸ÏòÕâ¶ÎµØÖ·¿ÉÄÜÔÚDMA·ÃÎÊÖе¼Ö²»¿ÉÔ¤¼ÆµÄ½á¹û Ïà¹Øº¯Êý */ extern void DMA_CHxMAR_Write(DMA_CH_Type CHx, uint32_t SetValue); extern uint32_t DMA_CHxMAR_Read(DMA_CH_Type CHx); /* Channel11´«Ê䳤¶È£¬1-8192´Î´«Ê䣬½öÔÚFlash->RAM´«ÊäʱÓÐЧ£¬RAM->Flash´«ÊäΪ¹Ì¶¨³¤¶È64´Î´«Êä Ïà¹Øº¯Êý */ extern void DMA_CH11CR_CH11TSIZE_Set(uint32_t SetValue); extern uint32_t DMA_CH11CR_CH11TSIZE_Get(void); /* Channel11ÓÅÏȼ¶ 00£ºLow 01£ºMedium 10£ºHigh 11£ºVery High Ïà¹Øº¯Êý */ extern void DMA_CH11CR_CH11PRI_Set(uint32_t SetValue); extern uint32_t DMA_CH11CR_CH11PRI_Get(void); /* Channel11´«Êä·½Ïò 1£ºFlash->RAM´«Êä 0£ºRAM->Flash´«Êä Ïà¹Øº¯Êý */ extern void DMA_CH11CR_CH11DIR_Set(uint32_t SetValue); extern uint32_t DMA_CH11CR_CH11DIR_Get(void); /* Channel11 RAMµØÖ·Ôö¼õÉèÖ㬽öÔÚFlash->RAM´«ÊäÖÐÓÐЧ 1£ºRAMµØÖ·µÝÔö 0£ºRAMµØÖ·µÝ¼õ Ïà¹Øº¯Êý */ extern void DMA_CH11CR_CH11RI_Set(uint32_t SetValue); extern uint32_t DMA_CH11CR_CH11RI_Get(void); /* Channel11 FlashµØÖ·Ôö¼õÉèÖ㬽öÔÚFlash->RAM´«ÊäÖÐÓÐЧ 1£ºFlashµØÖ·µÝÔö 0£ºFlashµØÖ·µÝ¼õ Ïà¹Øº¯Êý */ extern void DMA_CH11CR_CH11FI_Set(uint32_t SetValue); extern uint32_t DMA_CH11CR_CH11FI_Get(void); /* Channel11´«ÊäÍê³ÉÖжÏʹÄÜ 1£ºÊ¹ÄÜ´«ÊäÍê³ÉÖÐ¶Ï 0£º¹Ø±Õ´«ÊäÍê³ÉÖÐ¶Ï Ïà¹Øº¯Êý */ extern void DMA_CH11CR_CH11FTIE_Setable(FunState NewState); extern FunState DMA_CH11CR_CH11FTIE_Getable(void); /* Channel11°ë³Ì´«ÊäÍê³ÉÖжÏʹÄÜ 1£ºÊ¹Äܰë³ÌÖÐ¶Ï 0£º¹Ø±Õ°ë³ÌÖÐ¶Ï Ïà¹Øº¯Êý */ extern void DMA_CH11CR_CH11HTIE_Setable(FunState NewState); extern FunState DMA_CH11CR_CH11HTIE_Getable(void); /* Channel11ʹÄÜ 1£ºÆô¶¯Í¨µÀ0 0£º¹Ø±ÕͨµÀ0 Ïà¹Øº¯Êý */ extern void DMA_CH11CR_CH11EN_Setable(FunState NewState); extern FunState DMA_CH11CR_CH11EN_Getable(void); /* Channel11 FlashÖ¸ÕëµØÖ·£¬DMA´«ÊäÆô¶¯Ç°Èí¼þÏò´Ë¼Ä´æÆ÷дÈëFlashÄ¿±êµØÖ·£¬DMAÆô¶¯ºó´Ë¼Ä´æÆ÷ËæDMA´«Êä×ÔÔö»ò×Ô¼õ Èí¼þ¿ÉÒÔ²éѯµ±Ç°DMA´«ÊäµÄÄ¿±êFlashµØÖ· ´Ë¼Ä´æÆ÷µÍ루bit5-0£©½öÔÚFlash->RAM´«ÊäÖÐÓÐЧ£¬RAM->Flash´«ÊäÖÐĬÈÏ¶ÔÆëFlashµÄhalf-sectorÆðʼµØÖ· Ïà¹Øº¯Êý */ extern void DMA_CH11FAR_Write(uint32_t SetValue); extern uint32_t DMA_CH11FAR_Read(void); /* Channel7 RAM×ÖÖ¸ÕëµØÖ·£¬DMA´«ÊäÆô¶¯Ç°Èí¼þÏò´Ë¼Ä´æÆ÷дÈëRAMÄ¿±êµØÖ·£¨wordµØÖ·£©£¬DMAÆô¶¯ºó´Ë¼Ä´æÆ÷ËæDMA´«Êä×ÔÔö»ò×Ô¼õ Èí¼þ¿ÉÒÔ²éѯµ±Ç°DMA´«ÊäµÄÄ¿±êRAMµØÖ· Ïà¹Øº¯Êý */ extern void DMA_CH11RAR_Write(uint32_t SetValue); extern uint32_t DMA_CH11RAR_Read(void); /* DMA´«Ê䵨ַ´íÎó±êÖ¾£¬µ±´æ´¢Æ÷Ö¸Õ볬¹ýRAMºÍFlashºÏ·¨µØÖ··¶Î§Ê±ÖÃλ Ïà¹Øº¯Êý */ extern void DMA_ISR_DMA_ADDRERR_Clr(void); extern FlagStatus DMA_ISR_DMA_ADDRERR_Chk(void); /* DMAͨµÀx´«ÊäÍê³É±êÖ¾£¬Ó²¼þÖÃ룬Èí¼þд1ÇåÁã 1£º¶ÔӦͨµÀ´«ÊäÍê³É 0£º¶ÔӦͨµÀ´«ÊäδÍê³É Ïà¹Øº¯Êý */ extern void DMA_ISR_DMACHFT_Clr(DMA_CH_Type CHx); extern FlagStatus DMA_ISR_DMACHFT_Chk(DMA_CH_Type CHx); /* DMAͨµÀx´«Êä°ë³Ì±êÖ¾£¬Ó²¼þÖÃ룬Èí¼þд1ÇåÁã Ïà¹Øº¯Êý */ extern void DMA_ISR_DMACHHT_Clr(DMA_CH_Type CHx); extern FlagStatus DMA_ISR_DMACHHT_Chk(DMA_CH_Type CHx); /* Channelx´«Ê䳤¶Èshadow¼Ä´æÆ÷£»Ñ­»·Ä£Ê½ÏÂÈç¹ûʹÄÜÁËCIRC_UPD¼Ä´æÆ÷£¬ÔòÔÚ±¾ÂÖ´«ÊäÍê³Éºó½«shadow¼Ä´æÆ÷Öµ¸´ÖƵ½CHxTSIZEÖС£ Ïà¹Øº¯Êý */ extern void DMA_CHxCSR_CHxTSIZE_SDW_Set(DMA_CH_Type CHx, uint32_t SetValue); extern uint32_t DMA_CHxCSR_CHxTSIZE_SDW_Get(DMA_CH_Type CHx); /* RAMµØÖ·Ôö¼õÉèÖÃshadow¼Ä´æÆ÷£¬Ñ­»·Ä£Ê½ÏÂÈç¹ûʹÄÜÁËCIRC_UPD¼Ä´æÆ÷£¬ÔòÔÚ±¾ÂÖ´«ÊäÍê³Éºó½«shadow¼Ä´æÆ÷Öµ¸´ÖƵ½CHxTSIZEÖС£ Ïà¹Øº¯Êý */ extern void DMA_CHxCSR_CHxINC_SDW_Set(DMA_CH_Type CHx, uint32_t SetValue); extern uint32_t DMA_CHxCSR_CHxINC_SDW_Get(DMA_CH_Type CHx); /* Channelx´æ´¢Æ÷Ö¸ÕëµØÖ·Ó°×ӼĴæÆ÷¡£ Ñ­»·Ä£Ê½ÏÂÈç¹ûʹÄÜÁËCIRC_UPD¼Ä´æÆ÷£¬ÔòÔÚ±¾ÂÖ´«ÊäÍê³Éºó½«shadow¼Ä´æÆ÷Öµ¸´ÖƵ½CHxMEMADÖС£ Ïà¹Øº¯Êý */ extern void DMA_CHxMASR_Write(DMA_CH_Type CHx, uint32_t SetValue); extern uint32_t DMA_CHxMASR_Read(DMA_CH_Type CHx); //Announce_End void DMA_DeInit(void); void DMA_Init(DMA_InitTypeDef *para); //Announce_End #ifdef __cplusplus } #endif #endif /* __FM33A0XXEV_DMA_H */