/** ****************************************************************************** * @file fm33a0xxev_pae.c * @author FM33A0XXEV Application Team * @version V1.0.0 * @date 16-April-2020 * @brief This file provides firmware functions to manage the following * functionalities of....: * */ /* Includes ------------------------------------------------------------------*/ #include "fm33a0xxev_pae.h" /** @addtogroup fm33a0xxev_StdPeriph_Driver * @{ */ /** @defgroup PAE * @brief PAE driver modules * @{ */ /* ÊäÈëÊý¾Ý˳Ðò½»»»¿ØÖÆ 00£º²»½»»» 01£ºhalf-word½»»» 10£ºbyte½»»» 11£ºbit½»»» ´Ë¼Ä´æÆ÷ÓÃÓÚ¶ÔÊäÈë32bitÊý¾ÝµÄλÐò½øÐе÷Õû£»±ÈÈçÊäÈëΪ0x1234_5678£¬half-word½»»»ºóΪ0x5678_1234£¬byte½»»»ºóΪ0x7856_3412£¬bit½»»»ºóΪ0x1E6A_2C48 Ïà¹Øº¯Êý */ void PAE_CSR_DATA_TYPE_Set(uint32_t SetValue) { uint32_t tmpreg; tmpreg = PAE->CSR; tmpreg &= ~(PAE_CSR_DATA_TYPE_Msk); tmpreg |= (SetValue & PAE_CSR_DATA_TYPE_Msk); PAE->CSR = tmpreg; } uint32_t PAE_CSR_DATA_TYPE_Get(void) { return (PAE->CSR & PAE_CSR_DATA_TYPE_Msk); } /* ÔËËãÆô¶¯Î»£¬Èí¼þд1Æô¶¯¼ÆË㣬¼ÆËã½áÊøºóÓ²¼þ×Ô¶¯ÇåÁã Ïà¹Øº¯Êý */ void PAE_CSR_START_Setable(FunState NewState) { if (NewState == ENABLE) { PAE->CSR |= (PAE_CSR_START_Msk); } else { PAE->CSR &= ~(PAE_CSR_START_Msk); } } /* Ä£¿é¹¤×÷ģʽ£º 00£ºÄ£Ê½0£¬µ¥´ÎÄ£ÔËË㣬¿ÉÅäÖÃ4Block/16Block 01£ºÄ£Ê½1£¬µ¥´ÎµãÔËË㣬¹Ì¶¨16Block 10£ºÄ£Ê½2£¬32bitÃÜÔ¿Á¬ÐøRSAÔËË㣬¹Ì¶¨4Block 11£ºÄ£Ê½3£¬32bitÃÜÔ¿Á¬ÐøECCÔËË㣬¹Ì¶¨16Block Ïà¹Øº¯Êý */ void PAE_CSR_RUN_MODE_Set(uint32_t SetValue) { uint32_t tmpreg; tmpreg = PAE->CSR; tmpreg &= ~(PAE_CSR_RUN_MODE_Msk); tmpreg |= (SetValue & PAE_CSR_RUN_MODE_Msk); PAE->CSR = tmpreg; } uint32_t PAE_CSR_RUN_MODE_Get(void) { return (PAE->CSR & PAE_CSR_RUN_MODE_Msk); } /* PAEÈí¼þ¸´Î»£¬Èí¼þд1¸´Î»PAEÄÚ²¿Ö÷Òª¼Ä´æÆ÷£¨Ä£³¤¼Ä´æÆ÷PAE_MLRºÍÄ£²Î¼Ä´æÆ÷PAE_MPR²»ÊÜÓ°Ï죩£¬¸´Î»½áÊøºóÓ²¼þ×Ô¶¯ÇåÁã ×¢Ò⣺Èí¼þдSOFT_RSTÖ®ºó£¬Ðè²åÈëÖÁÉÙÒ»ÌõNOPÖ¸Áîºó£¬ÔÙдÈëPAEÆäËû¼Ä´æÆ÷£»ÔÚSOFT_RST²Ù×÷ºóÁ¢¼´Ð´PAE¼Ä´æÆ÷¿ÉÄÜдÈëʧ°Ü¡£ Ïà¹Øº¯Êý */ void PAE_CSR_SOFT_RST_Setable(FunState NewState) { if (NewState == ENABLE) { PAE->CSR |= (PAE_CSR_SOFT_RST_Msk); } else { PAE->CSR &= ~(PAE_CSR_SOFT_RST_Msk); } } /* PAEÖжÏʹÄÜ 1£ºÊ¹ÄÜÖжÏÊä³ö 0£º½ûÖ¹ÖжÏÊä³ö Ïà¹Øº¯Êý */ void PAE_CSR_PAEIE_Setable(FunState NewState) { if (NewState == ENABLE) { PAE->CSR |= (PAE_CSR_PAEIE_Msk); } else { PAE->CSR &= ~(PAE_CSR_PAEIE_Msk); } } FunState PAE_CSR_PAEIE_Getable(void) { if (PAE->CSR & (PAE_CSR_PAEIE_Msk)) { return ENABLE; } else { return DISABLE; } } /* PAEÖжϱêÖ¾¼Ä´æÆ÷ Ïà¹Øº¯Êý */ void PAE_CSR_PAEIF_Clr(void) { PAE->CSR = PAE_CSR_PAEIF_Msk; } FlagStatus PAE_CSR_PAEIF_Chk(void) { if (PAE->CSR & PAE_CSR_PAEIF_Msk) { return SET; } else { return RESET; } } /* PAE¹¤×÷±êÖ¾ 1£ºPAEÕýÔÚÔËËãÖÐ 0£ºPAE¿ÕÏÐ Ïà¹Øº¯Êý */ FlagStatus PAE_CSR_BUSY_Chk(void) { if (PAE->CSR & PAE_CSR_BUSY_Msk) { return SET; } else { return RESET; } } /* ÔÚRAMÅäÖÃΪ4 Blockʱ£¬Ä£³¤×î´óΪ2048bit£º Ä£³¤=£¨MLR[5:0]+1£©*32λ¡£ ÔÚRAMÅäÖÃΪ16 Blockʱ£¬Ä£³¤×î´óΪ512bit£¬MLRÖ»ÓеÍ4bitÓÐЧ£º Ä£³¤=£¨MLR[3:0]+1£©*32λ¡£ Ïà¹Øº¯Êý */ void PAE_MLR_Write(uint32_t SetValue) { PAE->MLR = (SetValue & PAE_MLR_PAE_MLR_Msk); } uint32_t PAE_MLR_Read(void) { return (PAE->MLR & PAE_MLR_PAE_MLR_Msk); } /* 32bitÄ£²Î¼Ä´æÆ÷£¬Ö»¿Éд£¬²»¿É¶Á Ïà¹Øº¯Êý */ void PAE_MPR_Write(uint32_t SetValue) { PAE->MPR = (SetValue); } /* RAM BlockÅäÖÃλ 1£ºËã·¨RAMÅäÖÃΪ16 Block 0£ºËã·¨RAMÅäÖÃλ4 Block Ïà¹Øº¯Êý */ void PAE_M0CFG_BLKCFG_Set(uint32_t SetValue) { uint32_t tmpreg; tmpreg = PAE->M0CFG; tmpreg &= ~(PAE_M0CFG_BLKCFG_Msk); tmpreg |= (SetValue & PAE_M0CFG_BLKCFG_Msk); PAE->M0CFG = tmpreg; } uint32_t PAE_M0CFG_BLKCFG_Get(void) { return (PAE->M0CFG & PAE_M0CFG_BLKCFG_Msk); } /* µ¥´ÎÄ£ÔËËãÖ¸Á 00£ºÃɸçÂíÀûÄ£³Ë 01£ºÃɸçÂíÀûÄ£¼Ó 10£ºRFU 11£ºÃɸçÂíÀûÄ£¼õ Ïà¹Øº¯Êý */ void PAE_M0CFG_INS_M0_Set(uint32_t SetValue) { uint32_t tmpreg; tmpreg = PAE->M0CFG; tmpreg &= ~(PAE_M0CFG_INS_M0_Msk); tmpreg |= (SetValue & PAE_M0CFG_INS_M0_Msk); PAE->M0CFG = tmpreg; } uint32_t PAE_M0CFG_INS_M0_Get(void) { return (PAE->M0CFG & PAE_M0CFG_INS_M0_Msk); } /* ÅäÖÃÔËËã½á¹ûËùÔÚBlock µ±BLK_CFG==1£¬4bitÓÐЧ£¬±íʾBlock0~Block15 µ±BLK_CFG==0£¬µÍ2bitÓÐЧ£¬±íʾBlock0~Block3 Ïà¹Øº¯Êý */ void PAE_M0CFG_RES_BLK_Set(uint32_t SetValue) { uint32_t tmpreg; tmpreg = PAE->M0CFG; tmpreg &= ~(PAE_M0CFG_RES_BLK_Msk); tmpreg |= (SetValue & PAE_M0CFG_RES_BLK_Msk); PAE->M0CFG = tmpreg; } uint32_t PAE_M0CFG_RES_BLK_Get(void) { return (PAE->M0CFG & PAE_M0CFG_RES_BLK_Msk); } /* ²Ù×÷Êý1µØÖ·£º µ±BLK_CFG==1£¬4bitÓÐЧ£¬±íʾBlock0~Block15 µ±BLK_CFG==0£¬µÍ2bitÓÐЧ£¬±íʾBlock0~Block3 Ïà¹Øº¯Êý */ void PAE_M0CFG_OP1_BLK_Set(uint32_t SetValue) { uint32_t tmpreg; tmpreg = PAE->M0CFG; tmpreg &= ~(PAE_M0CFG_OP1_BLK_Msk); tmpreg |= (SetValue & PAE_M0CFG_OP1_BLK_Msk); PAE->M0CFG = tmpreg; } uint32_t PAE_M0CFG_OP1_BLK_Get(void) { return (PAE->M0CFG & PAE_M0CFG_OP1_BLK_Msk); } /* ²Ù×÷Êý2µØÖ·£º µ±BLK_CFG==1£¬4bitÓÐЧ£¬±íʾBlock0~Block15 µ±BLK_CFG==0£¬µÍ2bitÓÐЧ£¬±íʾBlock0~Block3 Ïà¹Øº¯Êý */ void PAE_M0CFG_OP2_BLK_Set(uint32_t SetValue) { uint32_t tmpreg; tmpreg = PAE->M0CFG; tmpreg &= ~(PAE_M0CFG_OP2_BLK_Msk); tmpreg |= (SetValue & PAE_M0CFG_OP2_BLK_Msk); PAE->M0CFG = tmpreg; } uint32_t PAE_M0CFG_OP2_BLK_Get(void) { return (PAE->M0CFG & PAE_M0CFG_OP2_BLK_Msk); } /* µ¥´ÎµãÔËËãÖ¸Á 000£ºJacobin×ø±ê±¶µãÔËËã 001£º»ìºÏ×ø±êµã¼ÓÔËËã 010£ºRFU 011£ºÃɸçÂíÀûµã³Ë±¶µãÔËË㣨ECDBL£© 100£ºÃɸçÂíÀûµã³Ë±¶µãµã¼ÓÔËË㣨ECADDDBL£© 101£ºÃɸçÂíÀûµã³ËY×ø±ê»Ö¸´ÔËË㣨ECYRecover£© 110£ºRFU 111£ºRFU Ïà¹Øº¯Êý */ void PAE_M1CFG_INS_M1_Set(uint32_t SetValue) { uint32_t tmpreg; tmpreg = PAE->M1CFG; tmpreg &= ~(PAE_M1CFG_INS_M1_Msk); tmpreg |= (SetValue & PAE_M1CFG_INS_M1_Msk); PAE->M1CFG = tmpreg; } uint32_t PAE_M1CFG_INS_M1_Get(void) { return (PAE->M1CFG & PAE_M1CFG_INS_M1_Msk); } /* ²ÎÊýAָʾÐźŠ1£ºAµÈÓÚ-3 0£ºA²»µÈÓÚ-3 Ïà¹Øº¯Êý */ void PAE_M1CFG_AEN3_M1_Set(uint32_t SetValue) { uint32_t tmpreg; tmpreg = PAE->M1CFG; tmpreg &= ~(PAE_M1CFG_AEN3_M1_Msk); tmpreg |= (SetValue & PAE_M1CFG_AEN3_M1_Msk); PAE->M1CFG = tmpreg; } uint32_t PAE_M1CFG_AEN3_M1_Get(void) { return (PAE->M1CFG & PAE_M1CFG_AEN3_M1_Msk); } /* µ±Ç°¼ÆËãÃÜԿλָʾ±êÖ¾ 1£ºµ±Ç°Î»Îª1 0£ºµ±Ç°Î»Îª0 Ïà¹Øº¯Êý */ void PAE_M1CFG_BIT_VALUE_M1_Set(uint32_t SetValue) { uint32_t tmpreg; tmpreg = PAE->M1CFG; tmpreg &= ~(PAE_M1CFG_BIT_VALUE_M1_Msk); tmpreg |= (SetValue & PAE_M1CFG_BIT_VALUE_M1_Msk); PAE->M1CFG = tmpreg; } uint32_t PAE_M1CFG_BIT_VALUE_M1_Get(uint32_t SetValue) { return (PAE->M1CFG & PAE_M1CFG_BIT_VALUE_M1_Msk); } /* ÐéÄ£³Ë¿ØÖÆÎ» 1£ºµ±Ç°ÃÜԿλΪ0ʱͬÑù½øÐÐÄ£³Ë²Ù×÷ 0£ºµ±Ç°ÃÜԿλΪ0ʱ²»½øÐÐÄ£³Ë²Ù×÷ Ïà¹Øº¯Êý */ void PAE_M2CFG_ALWAYS_MULT_Set(uint32_t SetValue) { uint32_t tmpreg; tmpreg = PAE->M2CFG; tmpreg &= ~(PAE_M2CFG_ALWAYS_MULT_Msk); tmpreg |= (SetValue & PAE_M2CFG_ALWAYS_MULT_Msk); PAE->M2CFG = tmpreg; } uint32_t PAE_M2CFG_ALWAYS_MULT_Get(void) { return (PAE->M2CFG & PAE_M2CFG_ALWAYS_MULT_Msk); } /* ÃÜԿλָʾÐźţ¬Ó²¼þ×Ô¶¯ÖÃ룬Èí¼þÇåÁã 1£ºÒÑÕÒµ½Îª1µÄbit 0£ºÎ´ÕÒµ½Îª1µÄbit Ïà¹Øº¯Êý */ void PAE_M2CFG_FBO_M2_Set(uint32_t SetValue) { uint32_t tmpreg; tmpreg = PAE->M2CFG; tmpreg &= ~(PAE_M2CFG_FBO_M2_Msk); tmpreg |= (SetValue & PAE_M2CFG_FBO_M2_Msk); PAE->M2CFG = tmpreg; } uint32_t PAE_M2CFG_FBO_M2_Get(void) { return (PAE->M2CFG & PAE_M2CFG_FBO_M2_Msk); } /* ²ÎÊýAָʾÐźŠ1£ºAµÈÓÚ-3 0£ºA²»µÈÓÚ-3 Ïà¹Øº¯Êý */ void PAE_M3CFG_AEN3_M3_Set(uint32_t SetValue) { uint32_t tmpreg; tmpreg = PAE->M3CFG; tmpreg &= ~(PAE_M3CFG_AEN3_M3_Msk); tmpreg |= (SetValue & PAE_M3CFG_AEN3_M3_Msk); PAE->M3CFG = tmpreg; } uint32_t PAE_M3CFG_AEN3_M3_Get(void) { return (PAE->M3CFG & PAE_M3CFG_AEN3_M3_Msk); } /* ÃÜԿλָʾÐźţ¬Ó²¼þ×Ô¶¯ÖÃ룬Èí¼þÇåÁã 1£ºÒÑÕÒµ½Îª1µÄbit 0£ºÎ´ÕÒµ½Îª1µÄbit Ïà¹Øº¯Êý */ void PAE_M3CFG_FBO_M3_Set(uint32_t SetValue) { uint32_t tmpreg; tmpreg = PAE->M3CFG; tmpreg &= ~(PAE_M3CFG_FBO_M3_Msk); tmpreg |= (SetValue & PAE_M3CFG_FBO_M3_Msk); PAE->M3CFG = tmpreg; } uint32_t PAE_M3CFG_FBO_M3_Get(void) { return (PAE->M3CFG & PAE_M3CFG_FBO_M3_Msk); } /* 32bitÊý¾Ý¼Ä´æÆ÷£¬Ö»¿Éд£¬²»¿É¶Á£»½öÔÚÁ¬ÐøRSAÔËËãºÍÁ¬ÐøECCÔËËãģʽÏÂÓÐЧ¡£ Ïà¹Øº¯Êý */ void PAE_WORD_Write(uint32_t SetValue) { PAE->WORD = (SetValue); } void PAE_Deinit(void) { //PAE->CSR = 0x00000000; //PAE->MLR = 0x00000000; //PAE->MPR = 0x00000000; //PAE->M0CFG = 0x00000000; //PAE->M1CFG = 0x00000000; //PAE->M2CFG = 0x00000000; //PAE->M3CFG = 0x00000000; //PAE->WORD = 0x00000000; } /******END OF FILE****/