forked from trocache/RefKEIL
52 lines
1.8 KiB
C
52 lines
1.8 KiB
C
#include "Driver_GPIO.h"
|
|
|
|
void MyGPIO_Init(MyGPIO_Struct_TypeDef * GPIOStructPtr) {
|
|
//Configurer les horloges
|
|
if(GPIOStructPtr->GPIO == GPIOA){
|
|
RCC->APB2ENR |= RCC_APB2ENR_IOPAEN;//RCC->APB2ENR = 0x02;
|
|
}
|
|
else if(GPIOStructPtr->GPIO == GPIOB){
|
|
RCC->APB2ENR |= RCC_APB2ENR_IOPBEN;//RCC->APB2ENR = 0x03;
|
|
}
|
|
else if (GPIOStructPtr->GPIO == GPIOC){
|
|
RCC->APB2ENR |= RCC_APB2ENR_IOPCEN; //RCC->APB2ENR = 0x04;
|
|
}
|
|
//Initialiser le registre urilisé
|
|
if (GPIOStructPtr->GPIO_Pin < 8) {
|
|
GPIOStructPtr->GPIO->CRL &= ~(0xF << (4 * GPIOStructPtr->GPIO_Pin)); //Mettre le port du registre à 0
|
|
GPIOStructPtr->GPIO->CRL |= (GPIOStructPtr->GPIO_Conf << (4 * GPIOStructPtr->GPIO_Pin)); //Mettre la conf sélectionné dans le registre
|
|
} else {
|
|
GPIOStructPtr->GPIO->CRH &= ~(0xF << (4 * GPIOStructPtr->GPIO_Pin - 8)); //Mettre le port du registre à 0 / -8 car CRH commence à 8
|
|
GPIOStructPtr->GPIO->CRH |= (GPIOStructPtr->GPIO_Conf << (4* GPIOStructPtr->GPIO_Pin - 8));
|
|
}
|
|
|
|
|
|
if (GPIOStructPtr->GPIO_Conf == In_PullUp) {
|
|
GPIOStructPtr->GPIO->ODR |= (1<<GPIOStructPtr->GPIO_Pin); //Mettre à 1 pour le push pull le registre
|
|
}else{
|
|
GPIOStructPtr->GPIO->ODR &= ~(1<<GPIOStructPtr->GPIO_Pin); //Mettre à 0 pour le pull down le registre
|
|
}
|
|
}
|
|
|
|
int MyGPIO_Read(GPIO_TypeDef * GPIO, char GPIO_Pin){
|
|
if((GPIO->IDR & (1 << GPIO_Pin)) != 0) //Retourne si la Pin a été sélectionné
|
|
{
|
|
return 1;
|
|
}else{
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
//BSRR registre permettant de Set la Pin
|
|
void MyGPIO_Set(GPIO_TypeDef * GPIO, char GPIO_Pin){
|
|
GPIO->BSRR |= (1 << GPIO_Pin); //Mettre à 1 la PIN
|
|
}
|
|
|
|
//BRR registre permettant de ReSet la Pin
|
|
void MyGPIO_Reset(GPIO_TypeDef * GPIO, char GPIO_Pin){
|
|
GPIO->BRR |= (1 << GPIO_Pin); //Mettre à 0 la PIN
|
|
}
|
|
|
|
void MyGPIO_Toggle(GPIO_TypeDef * GPIO, char GPIO_Pin){
|
|
GPIO->ODR ^= (1 << GPIO_Pin); //XOR, Inverser l'état de la PIN
|
|
}
|