#ifndef _PORT_H
#define _PORT_H
#include <assert.h>
#include <inttypes.h>
#include "includes.h"
#include <stdio.h>
#include <stdint.h>
/* ---------------------------------STM32 includes ----------------------------*/
#include "stm32f10x.h"
#define INLINE inline
#define PR_BEGIN_EXTERN_C extern "C" {
#define PR_END_EXTERN_C }
/* -------------------------- Modbus macros -----------------------------------*/
#define MODBUS_PORT_SERIAL_RCC RCC_APB2Periph_USART1
#define MODBUS_PORT_SERIAL_TX_GPIO GPIOA
#define MODBUS_PORT_SERIAL_RX_GPIO GPIOA
#define MODBUS_PORT_SERIAL_TX_PIN GPIO_Pin_9
#define MODBUS_PORT_SERIAL_RX_PIN GPIO_Pin_10
#define MODBUS_RS485_CONTRL_GPIO GPIOA
#define MODBUS_RS485_CONTRL_PIN GPIO_Pin_11
#define MODBUS_RS485_CONTRL_RCC RCC_APB2Periph_GPIOA
#define MODBUS_RS485_SERIAL_PORT USART1
#define MB_IRQn USART1_IRQn
#define MB_IRQHandler USART1_IRQHandler
//TODO 暂时先写B2引脚,等组网测试时再确认
#define SLAVE_RS485_SEND_MODE GPIO_SetBits(MODBUS_RS485_CONTRL_GPIO,MODBUS_RS485_CONTRL_PIN)
#define SLAVE_RS485_RECEIVE_MODE GPIO_ResetBits(MODBUS_RS485_CONTRL_GPIO,MODBUS_RS485_CONTRL_PIN)
#define ENTER_CRITICAL_SECTION( )
#define EXIT_CRITICAL_SECTION( )
/*位带操作,实现51类似的GPIO控制功能
*具体实现思想,参考<<CM3权威指南>>第五章(87页~92页).IO口操作宏定义*/
#define BITBAND(addr, bitnum) ((addr & 0xF0000000)+ 0x2000000 \
+((addr &0xFFFFF)<<5)+(bitnum<<2))
#define MEM_ADDR(addr) *((volatile unsigned long *)(addr))
#define BIT_ADDR(addr, bitnum) MEM_ADDR(BITBAND(addr, bitnum))
/* ------------------------IO口地址映射 ----------------------------------------*/
#define GPIOA_ODR_Addr (GPIOA_BASE+12) /*!> 0x4001080C */
#define GPIOB_ODR_Addr (GPIOB_BASE+12) /*!> 0x40010C0C */
#define GPIOC_ODR_Addr (GPIOC_BASE+12) /*!> 0x4001100C */
#define GPIOD_ODR_Addr (GPIOD_BASE+12) /*!> 0x4001140C */
#define GPIOE_ODR_Addr (GPIOE_BASE+12) /*!> 0x4001180C */
#define GPIOF_ODR_Addr (GPIOF_BASE+12) /*!> 0x40011A0C */
#define GPIOG_ODR_Addr (GPIOG_BASE+12) /*!> 0x40011E0C */
#define GPIOA_IDR_Addr (GPIOA_BASE+8) /*!> 0x40010808 */
#define GPIOB_IDR_Addr (GPIOB_BASE+8) /*!> 0x40010C08 */
#define GPIOC_IDR_Addr (GPIOC_BASE+8) /*!> 0x40011008 */
#define GPIOD_IDR_Addr (GPIOD_BASE+8) /*!> 0x40011408 */
#define GPIOE_IDR_Addr (GPIOE_BASE+8) /*!> 0x40011808 */
#define GPIOF_IDR_Addr (GPIOF_BASE+8) /*!> 0x40011A08 */
#define GPIOG_IDR_Addr (GPIOG_BASE+8) /*!> 0x40011E08 */
/* ----------------------- IO口操作,只对单一的IO口 ----------------------------*/
#define PAout(n) BIT_ADDR(GPIOA_ODR_Addr,n)
#define PAin(n) BIT_ADDR(GPIOA_IDR_Addr,n)
#define PBout(n) BIT_ADDR(GPIOB_ODR_Addr,n)
#define PBin(n) BIT_ADDR(GPIOB_IDR_Addr,n)
#define PCout(n) BIT_ADDR(GPIOC_ODR_Addr,n)
#define PCin(n) BIT_ADDR(GPIOC_IDR_Addr,n)
#define PDout(n) BIT_ADDR(GPIOD_ODR_Addr,n)
#define PDin(n) BIT_ADDR(GPIOD_IDR_Addr,n)
#define PEout(n) BIT_ADDR(GPIOE_ODR_Addr,n)
#define PEin(n) BIT_ADDR(GPIOE_IDR_Addr,n)
#define PFout(n) BIT_ADDR(GPIOF_ODR_Addr,n)
#define PFin(n) BIT_ADDR(GPIOF_IDR_Addr,n)
#define PGout(n) BIT_ADDR(GPIOG_ODR_Addr,n)
#define PGin(n) BIT_ADDR(GPIOG_IDR_Addr,n)
#define LED1 PCout(6)
#define GREEN_LED_BLINK() do \
{\
LED1 = ~LED1 ;\
}while(0)
typedef uint8_t BOOL;
typedef unsigned char UCHAR;
typedef char CHAR;
typedef uint16_t USHORT;
typedef int16_t SHORT;
typedef uint32_t ULONG;
typedef int32_t LONG;
#ifndef TRUE
#define TRUE 1
#endif
#ifndef FALSE
#define FALSE 0
#endif
#endif |