📄 hardware_def.h
字号:
#ifndef HARDWARE_DEF_H
#define HARDWARE_DEF_H
#include "LPC2106.h"
#include "ucos_ii.h"
#include "Type_Def.h"
#define FOSC 14745600
// #define FOSC 11059200
#define PLL_MULT 4
#define PLL_DIV 2
#define FCCLK ( FOSC * PLL_MULT )
#define FCCO ( FCCLK * 2 * PLL_DIV )
#define VPB_DIV 4
#define FPCLK ( FCCLK / VPB_DIV )
#define PLLCFG_MSEL ( PLL_MULT - 1 )
#if PLL_DIV == 2
#define PLLCFG_PSEL 0
#endif
#if PLL_DIV == 4
#define PLLCFG_PSEL 1
#endif
#if PLL_DIV == 8
#define PLLCFG_PSEL 2
#endif
#if PLL_DIV == 16
#define PLLCFG_PSEL 3
#endif
/* 还要修改 os_cfg.h 中 OS_TICKS_PER_SEC 的定义 */
#define TICKS_PER_MSEC 3
#define TICKS_PER_SEC ( TICKS_PER_MSEC * 1000 )
#define UART_RX_BUFFER_SIZE 512
#define MAX_UART_FRAME_LENGTH 128
#define UART_TX_ARRAY_SIZE 8
typedef struct
{
INT8S *pData; /* 需要发送的数据指针 */
INT8U ucLength; /* 需要发送的数据长度 */
INT16U uiFrame_Number; /* 与 CC2420 部分使用的 uiFrame_Number 相同 */
INT8U ucTotal_Frames; /* 需要发送的总帧数 */
INT8U ucCurr_Frame; /* 当前帧号 */
INT8U aucReserved[3]; /* 4 字节对齐 */
} UART_TX_Data;
typedef struct
{
INT8S acRX_Buffer[UART_RX_BUFFER_SIZE]; /* 接收到的数据缓冲区 */
INT16U uiPoint; /* 数据指针 */
INT16U uiValid_Frames; /* 缓冲区中有效的数据帧数 */
INT16U uiStart_Of_First_Valid_Frame; /* 第一个有效帧的帧头 */
INT16U uiEnd_Of_Last_Valid_Frame; /* 最后一个有效帧的帧尾 */
BOOL bOn_Processing; /* 指明是否有数据存放在 asCC2420_TX_Data[] 中等待 CC2420 发送 */
INT8U aucReserved[3]; /* 保证 4 字节对齐 */
} UART_RX_Data;
#define UART_FRAME_HEADER 0x2a
#define UART_FRAME_END 0x23
/*------------------------------------------------------------------------------*/
/* 初始化 UART */
/* 通过 PINSEL0 寄存器设置复用引脚为 UART0 */
/* 先令 U0LCR.DLAB = 1,设置波特率 */
/* 然后令 U0LCR.DLAB = 0,同时设置数据格式为:每字节8位,1个停止位,无校验 */
/* 禁止 UART0 中断;Rx 触发值为14个字节;使用 UART0 FIFO */
/*------------------------------------------------------------------------------*/
#define Ini_UART0( x ) PINSEL0 = PINSEL0 & 0xfffffff0; \
PINSEL0 = PINSEL0 | 0x00000005; \
U0LCR = 0x80; \
U0DLM = ( ( FPCLK / 16 ) / x ) / 256; \
U0DLL = ( ( FPCLK / 16 ) / x ) % 256; \
U0LCR = 0x03; \
U0IER = 0; \
U0FCR = 0xc7
#define Ini_UART1( x ) PINSEL0 = PINSEL0 & 0x0000ffff; \
PINSEL0 = PINSEL0 | 0x00050000; \
U1LCR = 0x80; \
U1DLM = ( ( FPCLK / 16 ) / x ) / 256; \
U1DLL = ( ( FPCLK / 16 ) / x ) % 256; \
U1LCR = 0x03; \
U1MCR = 0; \
U1IER = 0; \
U1FCR = 0xc7
#define UART0_RX_FLAG ( U0LSR & 0x01 )
#define Read_UART0_RX_DaTa() U0RBR
#define Flush_UART0_RX_Buffer() U0FCR |= 0x02
#define UART0_Send_Byte( x ) U0THR = x
#define UART0_Send_Finished ( U0LSR & 0x40 )
/*------------------------------------------------------------------------------*/
/* 初始化 定时器0 */
/* 首先清除所有中断标志; 将计数器 TC 清0 */
/* 设置计数器的工作方式为: 计数到达后产生中断, 并且将计数器 TC 清0 */
/* 设置计数值为 FPCLK / x */
/*------------------------------------------------------------------------------*/
#define Ini_Timer0( x ) T0IR = 0xffffffff; \
T0TC = 0; \
T0MCR = 0x03; \
T0MR0 = ( FPCLK / x )
#define Start_Timer0() T0TCR = 0x01
#define Enable_Timer0_INT() VICIntEnable= 0x00000010
#define Timer0_INT_Flag ( T0IR & 0x01 )
#define Clear_Timer0_INT() T0IR = 0x01; \
VICVectAddr = 0
/*------------------------------------------------------------------------------*/
/* 初始化 SPI */
/* 不使用中断; 先发送 MSB; MASTER模式; SCK 是高电平有效; 在第一个时钟采样 */
/* SPI 通信频率是 FPCLK 的 128 分频 */
/*------------------------------------------------------------------------------*/
#define Ini_SPI() PINSEL0 = PINSEL0 & 0xffff00ff; \
PINSEL0 = PINSEL0 | 0x00005500; \
SPI_SPCR = 0x20; \
SPI_SPCCR = 128
#define SPI_Send_Data( x ) SPI_SPDR = x
#define SPI_SEND_FLAG ( SPI_SPSR & 0x80 )
#define SPI_Read_Data() SPI_SPDR
/*------------------------------------------------------------------------------*/
/* 禁止所有中断 */
/*------------------------------------------------------------------------------*/
#define Disable_All_INT() VICIntEnClr = 0xffffffff
/*------------------------------------------------------------------------------*/
/* 初始化 LED */
/*------------------------------------------------------------------------------*/
#define Ini_LEDs() PINSEL1 &= 0x0c3fffff; \
IODIR |= 0xd8000000; \
IOCLR |= 0xd8000000
#define Set_LED( x ) IOSET |= x
#define Clear_LED( x ) IOCLR |= x
#define LED_1 0x40000000
#define LED_2 0x80000000
#define LED_3 0x08000000
#define LED_4 0x10000000
/*------------------------------------------------------------------------------*/
/* 初始化按键 */
/* 注意按键被按下时,引脚上为低电平 */
/*------------------------------------------------------------------------------*/
#define Ini_Keys() PINSEL1 &= 0xf3ffffff; \
IODIR &= 0xdfffffff
#define Key_1 0x200000000
#define Key_Press( x ) !( IOPIN & x )
/*------------------------------------------------------------------------------*/
/* 定义供 CC2420 使用的引脚 */
/* CSn, RESETn, V_EN 为输出引脚, FIFO, SFD, FIFOP, CCA 为输入引脚 */
/*------------------------------------------------------------------------------*/
#define Ini_CC2420_Pins() PINSEL0 &= 0xff0fffff; \
PINSEL1 &= 0xffc00fff; \
IODIR &= 0xfe7ff3ff; \
IODIR |= 0x06400000
#define CSn 0x00400000
#define V_EN 0x02000000
#define RESETn 0x04000000
#define FIFO 0x01000000
#define SFD 0x00000400
#define FIFOP 0x00000800
#define CCA 0x00800000
#define Set_Pin( x ) IOSET |= x
#define Clear_Pin( x ) IOCLR |= x
#define Test_Pin( x ) ( IOPIN & x )
#endif /* #ifndef HARDWARE_DEF_H */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -