Paul Paterson / mbed-dev

Fork of mbed-dev by mbed official

Committer:
bogdanm
Date:
Thu Oct 01 15:25:22 2015 +0300
Revision:
0:9b334a45a8ff
Child:
144:ef7eb2e8f9f7
Initial commit on mbed-dev

Replaces mbed-src (now inactive)

Who changed what in which revision?

UserRevisionLine numberNew contents of line
bogdanm 0:9b334a45a8ff 1 #include "W7500x.h"
bogdanm 0:9b334a45a8ff 2 #include "W7500x_exti.h"
bogdanm 0:9b334a45a8ff 3 #include "W7500x_gpio.h"
bogdanm 0:9b334a45a8ff 4
bogdanm 0:9b334a45a8ff 5
bogdanm 0:9b334a45a8ff 6 /**
bogdanm 0:9b334a45a8ff 7 * @brief Deinitializes the EXTI peripheral registers to their default reset values.
bogdanm 0:9b334a45a8ff 8 * @param None
bogdanm 0:9b334a45a8ff 9 * @retval None
bogdanm 0:9b334a45a8ff 10 */
bogdanm 0:9b334a45a8ff 11 void EXTI_DeInit(void)
bogdanm 0:9b334a45a8ff 12 {
bogdanm 0:9b334a45a8ff 13 uint32_t i, loop =16;
bogdanm 0:9b334a45a8ff 14 for(i=0; i<loop; i++)
bogdanm 0:9b334a45a8ff 15 {
bogdanm 0:9b334a45a8ff 16 EXTI_PA->Port[i] = 0x00;
bogdanm 0:9b334a45a8ff 17 EXTI_PB->Port[i] = 0x00;
bogdanm 0:9b334a45a8ff 18 EXTI_PC->Port[i] = 0x00;
bogdanm 0:9b334a45a8ff 19 }
bogdanm 0:9b334a45a8ff 20 for(i=0; i<5; i++)
bogdanm 0:9b334a45a8ff 21 {
bogdanm 0:9b334a45a8ff 22 EXTI_PD->Port[i] = 0x00;
bogdanm 0:9b334a45a8ff 23 }
bogdanm 0:9b334a45a8ff 24 }
bogdanm 0:9b334a45a8ff 25
bogdanm 0:9b334a45a8ff 26 /**
bogdanm 0:9b334a45a8ff 27 * @brief Initializes the EXTI peripheral according to the specified
bogdanm 0:9b334a45a8ff 28 * parameters in the EXTI_InitStruct.
bogdanm 0:9b334a45a8ff 29 * @param EXTI_InitStruct: pointer to a EXTI_InitTypeDef structure
bogdanm 0:9b334a45a8ff 30 * that contains the configuration information for the EXTI peripheral.
bogdanm 0:9b334a45a8ff 31 * @retval None
bogdanm 0:9b334a45a8ff 32 */
bogdanm 0:9b334a45a8ff 33 void EXTI_Init(PAD_Type Px, EXTI_InitTypeDef* EXTI_InitStruct)
bogdanm 0:9b334a45a8ff 34 {
bogdanm 0:9b334a45a8ff 35 uint32_t pinpos = 0x00, pos = 0x00, currentpin = 0x00, loop = 16;
bogdanm 0:9b334a45a8ff 36 P_Port_Def *px_exti;
bogdanm 0:9b334a45a8ff 37
bogdanm 0:9b334a45a8ff 38 assert_param(IS_PAD_TYPE(Px));
bogdanm 0:9b334a45a8ff 39
bogdanm 0:9b334a45a8ff 40 if (Px == PAD_PA) px_exti = EXTI_PA;
bogdanm 0:9b334a45a8ff 41 else if (Px == PAD_PB) px_exti = EXTI_PB;
bogdanm 0:9b334a45a8ff 42 else if (Px == PAD_PC) px_exti = EXTI_PC;
bogdanm 0:9b334a45a8ff 43 else
bogdanm 0:9b334a45a8ff 44 {
bogdanm 0:9b334a45a8ff 45 px_exti = (P_Port_Def*)EXTI_PD;
bogdanm 0:9b334a45a8ff 46 loop = 5;
bogdanm 0:9b334a45a8ff 47 }
bogdanm 0:9b334a45a8ff 48
bogdanm 0:9b334a45a8ff 49 for(pinpos = 0x00; pinpos < loop; pinpos++)
bogdanm 0:9b334a45a8ff 50 {
bogdanm 0:9b334a45a8ff 51 pos = ((uint32_t)0x01) << pinpos;
bogdanm 0:9b334a45a8ff 52
bogdanm 0:9b334a45a8ff 53 currentpin = (EXTI_InitStruct->EXTI_Line) & pos;
bogdanm 0:9b334a45a8ff 54 if(currentpin == pos)
bogdanm 0:9b334a45a8ff 55 {
bogdanm 0:9b334a45a8ff 56 px_exti->Port[pinpos] |= EXTI_Px_INTEN_ENABLE;
bogdanm 0:9b334a45a8ff 57
bogdanm 0:9b334a45a8ff 58 if(EXTI_InitStruct->EXTI_Trigger == EXTI_Trigger_Rising)
bogdanm 0:9b334a45a8ff 59 px_exti->Port[pinpos] |= EXTI_Px_INTPOR_RISING_EDGE;
bogdanm 0:9b334a45a8ff 60 else
bogdanm 0:9b334a45a8ff 61 px_exti->Port[pinpos] |= EXTI_Px_INTPOR_FALLING_EDGE;
bogdanm 0:9b334a45a8ff 62 }
bogdanm 0:9b334a45a8ff 63 }
bogdanm 0:9b334a45a8ff 64
bogdanm 0:9b334a45a8ff 65 }
bogdanm 0:9b334a45a8ff 66
bogdanm 0:9b334a45a8ff 67 void EXTI_Polarity_Set(PAD_Type Px, uint16_t GPIO_Pin, uint16_t Polarity )
bogdanm 0:9b334a45a8ff 68 {
bogdanm 0:9b334a45a8ff 69 uint32_t pinpos = 0x00, pos = 0x00, currentpin = 0x00, loop = 16;
bogdanm 0:9b334a45a8ff 70 P_Port_Def *px_exti;
bogdanm 0:9b334a45a8ff 71
bogdanm 0:9b334a45a8ff 72 assert_param(IS_PAD_TYPE(Px));
bogdanm 0:9b334a45a8ff 73
bogdanm 0:9b334a45a8ff 74 if (Px == PAD_PA) px_exti = EXTI_PA;
bogdanm 0:9b334a45a8ff 75 else if (Px == PAD_PB) px_exti = EXTI_PB;
bogdanm 0:9b334a45a8ff 76 else if (Px == PAD_PC) px_exti = EXTI_PC;
bogdanm 0:9b334a45a8ff 77 else
bogdanm 0:9b334a45a8ff 78 {
bogdanm 0:9b334a45a8ff 79 px_exti = (P_Port_Def*)EXTI_PD;
bogdanm 0:9b334a45a8ff 80 loop = 5;
bogdanm 0:9b334a45a8ff 81 }
bogdanm 0:9b334a45a8ff 82
bogdanm 0:9b334a45a8ff 83 for(pinpos = 0x00; pinpos < loop; pinpos++)
bogdanm 0:9b334a45a8ff 84 {
bogdanm 0:9b334a45a8ff 85 pos = ((uint32_t)0x01) << pinpos;
bogdanm 0:9b334a45a8ff 86
bogdanm 0:9b334a45a8ff 87 currentpin = GPIO_Pin & pos;
bogdanm 0:9b334a45a8ff 88 if(currentpin == pos)
bogdanm 0:9b334a45a8ff 89 {
bogdanm 0:9b334a45a8ff 90 if(Polarity == EXTI_Trigger_Rising)
bogdanm 0:9b334a45a8ff 91 px_exti->Port[pinpos] |= EXTI_Px_INTPOR_RISING_EDGE;
bogdanm 0:9b334a45a8ff 92 else
bogdanm 0:9b334a45a8ff 93 px_exti->Port[pinpos] |= EXTI_Px_INTPOR_FALLING_EDGE;
bogdanm 0:9b334a45a8ff 94 }
bogdanm 0:9b334a45a8ff 95 }
bogdanm 0:9b334a45a8ff 96
bogdanm 0:9b334a45a8ff 97 }
bogdanm 0:9b334a45a8ff 98
bogdanm 0:9b334a45a8ff 99 /**
bogdanm 0:9b334a45a8ff 100 * @brief Fills each EXTI_InitStruct member with its reset value.
bogdanm 0:9b334a45a8ff 101 * @param EXTI_InitStruct: pointer to a EXTI_InitTypeDef structure which will
bogdanm 0:9b334a45a8ff 102 * be initialized.
bogdanm 0:9b334a45a8ff 103 * @retval None
bogdanm 0:9b334a45a8ff 104 */
bogdanm 0:9b334a45a8ff 105 void EXTI_StructInit(EXTI_InitTypeDef* EXTI_InitStruct)
bogdanm 0:9b334a45a8ff 106 {
bogdanm 0:9b334a45a8ff 107 EXTI_InitStruct->EXTI_Line = 0xFF;
bogdanm 0:9b334a45a8ff 108 EXTI_InitStruct->EXTI_Mode = EXTI_Mode_Interrupt;
bogdanm 0:9b334a45a8ff 109 EXTI_InitStruct->EXTI_Trigger = EXTI_Trigger_Falling;
bogdanm 0:9b334a45a8ff 110 }
bogdanm 0:9b334a45a8ff 111
bogdanm 0:9b334a45a8ff 112 uint16_t EXTI_Px_GetEXTEN(PAD_Type Px)
bogdanm 0:9b334a45a8ff 113 {
bogdanm 0:9b334a45a8ff 114 uint32_t i, loop = 16;
bogdanm 0:9b334a45a8ff 115 uint16_t ret=0;
bogdanm 0:9b334a45a8ff 116 P_Port_Def *px_exti;
bogdanm 0:9b334a45a8ff 117
bogdanm 0:9b334a45a8ff 118 assert_param(IS_PAD_TYPE(Px));
bogdanm 0:9b334a45a8ff 119
bogdanm 0:9b334a45a8ff 120 if (Px == PAD_PA) px_exti = EXTI_PA;
bogdanm 0:9b334a45a8ff 121 else if (Px == PAD_PB) px_exti = EXTI_PB;
bogdanm 0:9b334a45a8ff 122 else if (Px == PAD_PC) px_exti = EXTI_PC;
bogdanm 0:9b334a45a8ff 123 else
bogdanm 0:9b334a45a8ff 124 {
bogdanm 0:9b334a45a8ff 125 px_exti = (P_Port_Def*)EXTI_PD;
bogdanm 0:9b334a45a8ff 126 loop = 5;
bogdanm 0:9b334a45a8ff 127 }
bogdanm 0:9b334a45a8ff 128
bogdanm 0:9b334a45a8ff 129 for(i = 0x00; i < loop; i++)
bogdanm 0:9b334a45a8ff 130 {
bogdanm 0:9b334a45a8ff 131 ret |= (((px_exti->Port[i]&0x2)>>1)<<i);
bogdanm 0:9b334a45a8ff 132 }
bogdanm 0:9b334a45a8ff 133 return ret;
bogdanm 0:9b334a45a8ff 134 }
bogdanm 0:9b334a45a8ff 135
bogdanm 0:9b334a45a8ff 136 uint16_t EXTI_Px_GetEXTINTPOL(PAD_Type Px)
bogdanm 0:9b334a45a8ff 137 {
bogdanm 0:9b334a45a8ff 138 uint32_t i, loop = 16;
bogdanm 0:9b334a45a8ff 139 uint16_t ret=0;
bogdanm 0:9b334a45a8ff 140 P_Port_Def *px_exti;
bogdanm 0:9b334a45a8ff 141
bogdanm 0:9b334a45a8ff 142 assert_param(IS_PAD_TYPE(Px));
bogdanm 0:9b334a45a8ff 143
bogdanm 0:9b334a45a8ff 144 if (Px == PAD_PA) px_exti = EXTI_PA;
bogdanm 0:9b334a45a8ff 145 else if (Px == PAD_PB) px_exti = EXTI_PB;
bogdanm 0:9b334a45a8ff 146 else if (Px == PAD_PC) px_exti = EXTI_PC;
bogdanm 0:9b334a45a8ff 147 else
bogdanm 0:9b334a45a8ff 148 {
bogdanm 0:9b334a45a8ff 149 px_exti = (P_Port_Def*)EXTI_PD;
bogdanm 0:9b334a45a8ff 150 loop = 5;
bogdanm 0:9b334a45a8ff 151 }
bogdanm 0:9b334a45a8ff 152
bogdanm 0:9b334a45a8ff 153 for(i = 0x00; i < loop; i++)
bogdanm 0:9b334a45a8ff 154 {
bogdanm 0:9b334a45a8ff 155 ret |= ((px_exti->Port[i]&0x1)<<i);
bogdanm 0:9b334a45a8ff 156 }
bogdanm 0:9b334a45a8ff 157 return ret;
bogdanm 0:9b334a45a8ff 158 }