bluepill: working on header file
This commit is contained in:
		
							parent
							
								
									0ca0cb6167
								
							
						
					
					
						commit
						4be849722a
					
				| 
						 | 
				
			
			@ -0,0 +1,65 @@
 | 
			
		|||
#ifndef __BLUEPILL_H__
 | 
			
		||||
#define __BLUEPILL_H__
 | 
			
		||||
 | 
			
		||||
#include <stdint.h>
 | 
			
		||||
 | 
			
		||||
#define PORTA	(volatile unsigned int *)0x40010800
 | 
			
		||||
#define PORTB	(volatile unsigned int *)0x40010c00
 | 
			
		||||
#define PORTC	(volatile unsigned int *)0x40011000
 | 
			
		||||
#define PORTD	(volatile unsigned int *)0x40011400
 | 
			
		||||
#define PORTE	(volatile unsigned int *)0x40011800
 | 
			
		||||
 | 
			
		||||
#define RCC	(volatile unsigned int *)0x40021000
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 
 | 
			
		||||
	40011000	CRL
 | 
			
		||||
	40011004	CRH
 | 
			
		||||
	40011008	IDR
 | 
			
		||||
	4001100c	ODR
 | 
			
		||||
	40011010	BRR
 | 
			
		||||
	40011012	LCKR
 | 
			
		||||
 | 
			
		||||
 */
 | 
			
		||||
typedef struct _GPIO {
 | 
			
		||||
	uint32_t	CRL;	/* configuration register low */
 | 
			
		||||
	uint32_t	CRH;	/* configuration register high */
 | 
			
		||||
	uint32_t	IDR;	/* input data register */
 | 
			
		||||
	uint32_t	ODR;	/* output data register */
 | 
			
		||||
	uint32_t	BSRR;	/* bit set / reset register */
 | 
			
		||||
	uint16_t	BRR;	/* reset register */
 | 
			
		||||
	uint32_t	LCKR;	/* locking register */
 | 
			
		||||
} GPIO;
 | 
			
		||||
 | 
			
		||||
GPIO	*GPIO_A	 = (GPIO *)PORTA;
 | 
			
		||||
GPIO	*GPIO_B  = (GPIO *)PORTB;
 | 
			
		||||
GPIO	*GPIO_C  = (GPIO *)PORTC;
 | 
			
		||||
GPIO	*GPIO_D  = (GPIO *)PORTD;
 | 
			
		||||
GPIO	*GPIO_E  = (GPIO *)PORTE;
 | 
			
		||||
 | 
			
		||||
const uint32_t	OUTPUT_MAX_2MHZ = 2;
 | 
			
		||||
const uint32_t	OUTPUT_MAX_10MHZ = 1;
 | 
			
		||||
const uint32_t	OUTPUT_MAX_50MHZ = 3;
 | 
			
		||||
const uint32_t	OUTPUT_GPP = 0;
 | 
			
		||||
const uint32_t	OUTPUT_GOD = 1;
 | 
			
		||||
const uint32_t	OUTPUT_APP = 2;
 | 
			
		||||
const uint32_t	OUTPUT_AOD = 3;
 | 
			
		||||
 | 
			
		||||
void	set_pin(GPIO *gpio, uint32_t pin) { gpio->BSRR |= ((1 << pin) << 16); }
 | 
			
		||||
void	clear_pin(GPIO *gpio, uint32_t pin) { gpio->BSRR |= (1 << pin); }
 | 
			
		||||
void	output_mode(GPIO *gpio, uint32_t pin, uint32_t mode, uint32_t max) {
 | 
			
		||||
	if (pin > 7) {
 | 
			
		||||
		pin = ((pin - 8) * 4);
 | 
			
		||||
		gpio->CRH |= (max << pin);
 | 
			
		||||
		gpio->CRH |= (mode << (pin + 2));
 | 
			
		||||
	}
 | 
			
		||||
	else {
 | 
			
		||||
		pin *= 4;
 | 
			
		||||
		gpio->CRL |= (max << pin);
 | 
			
		||||
		gpio->CRL |= (mode << (pin + 2));
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#endif /* __BLUEPILL_H__ */
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue