⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 hardware_def.h

📁 是zmac的协议的全部完整的解析.代码例子很全
💻 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 + -