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

📄 bdm.h

📁 Freescale的S08BDM开发工具制作资料
💻 H
📖 第 1 页 / 共 2 页
字号:
#define _BDM12_WRITE_Y		    0x46
#define _BDM12_WRITE_SP		    0x47
#define _BDM12_GO_UNTIL		    0x0C

#define BDM12_CCR_ADDR		    0xFF06	/* address of CCR register in BDM memory space */
#define BDM12_STS_ADDR	      0xFF01	/* location of BDM Status register */
#define BDM12_GUESS_ADDR      0xFF00  /* location of register to be read when trying to guess speed of the target */

/* following macros perform individual BDM command */
/* naming convention: bdm_cmd_x_y, where x in number of input parameters, y is number of output paramreters */
/* suffxes indicate Word or Byte width */
/* HC/S12(X) wait times (in case ACKN is not used) are longer than those required for HCS08, so HCS08 can use the same macros */
/* HCS08 should support ACKN anyway */

/* no parameter */
#define BDM_CMD_0_0(cmd) 			                  bdm_tx_prepare(),\
                                                bdm_tx(cmd),\
                                                bdm_tx_finish(),\
									                              (bdm_status.ackn==ACKN)?bdm_ackn():bdm_wait64()
							                              
/* write word */
#define BDM_CMD_1W_0(cmd,parameter)	            bdm_tx_prepare(),\
                                                bdm_tx(cmd),\
									                              bdm_tx(((parameter)>>8)&0x00ff),\
									                              bdm_tx(((parameter)&0x00ff)),\
									                              bdm_tx_finish(),\
									                              (bdm_status.ackn==ACKN)?bdm_ackn():bdm_wait64()

/* read word */
#define BDM_CMD_0_1W(cmd,parameter)	            bdm_tx_prepare(),\
                                                bdm_tx(cmd),\
                                                bdm_tx_finish(),\
									                              (bdm_status.ackn==ACKN)?bdm_ackn():bdm_wait64(),\
                                                *((unsigned char *)((void *)(parameter)))=bdm_rx(),\
									                              *((unsigned char *)((void *)(parameter))+1)=bdm_rx()

/* write word & read byte (read word but return byte - HC/S12(x)) */
#define BDM_CMD_1W_1WB(cmd, parameter, result)  bdm_tx_prepare(),\
                                                bdm_tx(cmd),\
									                              bdm_tx(((parameter)>>8)&0x00ff),\
									                              bdm_tx(((parameter)&0x00ff)),\
									                              bdm_tx_finish(),\
  																							(bdm_status.ackn==ACKN)?bdm_ackn():bdm_wait150();\
                              									if ((parameter)&0x0001) {\
                              									  bdm_rx();\
                              									  *((unsigned char *)((void *)(result)))=bdm_rx();\
                              									} else {\
                              									  *((unsigned char *)((void *)(result)))=bdm_rx();\
                              									  bdm_rx();\
                              									}

/* write 2 words */
#define BDM_CMD_2W_0(cmd, parameter1, parameter2)   bdm_tx_prepare(),\
                                                    bdm_tx(cmd),\
									                                  bdm_tx(((parameter1)>>8)&0x00ff),\
									                                  bdm_tx(((parameter1)&0x00ff)),\
									                                  bdm_tx(((parameter2)>>8)&0x00ff),\
									                                  bdm_tx(((parameter2)&0x00ff)),\
									                                  bdm_tx_finish(),\
									                                  (bdm_status.ackn==ACKN)?bdm_ackn():bdm_wait150()
									                                  
/* write word and a byte (sends 2 words, the byte in both high and low byte of the 16-bit value) */
#define BDM_CMD_2WB_0(cmd, parameter1, parameter2)  bdm_tx_prepare(),\
                                                    bdm_tx(cmd),\
									                                  bdm_tx(((parameter1)>>8)&0x00ff),\
									                                  bdm_tx(((parameter1)&0x00ff)),\
									                                  bdm_tx(((parameter2)&0x00ff)),\
									                                  bdm_tx(((parameter2)&0x00ff)),\
									                                  bdm_tx_finish(),\
									                                  (bdm_status.ackn==ACKN)?bdm_ackn():bdm_wait150()

/* write word & read word */
#define BDM_CMD_1W_1W(cmd, parameter, result)   bdm_tx_prepare(),\
                                                bdm_tx(cmd),\
									                              bdm_tx(((parameter)>>8)&0x00ff),\
									                              bdm_tx(((parameter)&0x00ff)),\
									                              bdm_tx_finish(),\
  																							(bdm_status.ackn==ACKN)?bdm_ackn():bdm_wait150(),\
                             									  *((unsigned char *) ((void *)(result)))=bdm_rx(),\
                             									  *((unsigned char *) ((void *)(result))+1)=bdm_rx()
                             									  
/* write cmd & read status byte ( HCS08   ) */
#define BDM_CMD_1C_1SB(cmd, result)             bdm_tx_prepare(),\
                                                bdm_tx(cmd),\
									                              bdm_tx_finish(),*((unsigned char *)((void *)(result)))=bdm_rx()

/* read word */
#define BDM_CMD_0_1B(cmd,parameter)	            bdm_tx_prepare(),\
                                                bdm_tx(cmd),\
                                                bdm_tx_finish(),\
									                              (bdm_status.ackn==ACKN)?bdm_ackn():bdm_wait64(),\
                                                *((unsigned char *)((void *)(parameter)))=bdm_rx()
                                                
/* write byte */
#define BDM_CMD_1B_0(cmd,value    )	            bdm_tx_prepare(),\
                                                bdm_tx(cmd),\
									                              bdm_tx(((value)&0x00ff)),\
									                              bdm_tx_finish(),\
									                              (bdm_status.ackn==ACKN)?bdm_ackn():bdm_wait64()                                                

/* write word & read byte (read word but return byte -  */
#define BDM_CMD_1W_1B(cmd, parameter, result)  bdm_tx_prepare(),\
                                                bdm_tx(cmd),\
									                              bdm_tx(((parameter)>>8)&0x00ff),\
									                              bdm_tx(((parameter)&0x00ff)),\
									                              bdm_tx_finish(), (bdm_status.ackn==ACKN)?bdm_ackn():bdm_wait64(), *((unsigned char *)((void *)(result)))=bdm_rx()									                                                           									
                              									
/* write 1 words then delay then 1byte*/
#define BDM_CMD_1W1B_0(cmd, parameter1, parameter2)   bdm_tx_prepare(),\
                                                    bdm_tx(cmd),\
									                                  bdm_tx(((parameter1)>>8)&0x00ff),\
									                                  bdm_tx(((parameter1)&0x00ff)),\
									                                  bdm_tx(((parameter2))&0x00ff),\
									                                  bdm_tx_finish(),\
									                                  (bdm_status.ackn==ACKN)?bdm_ackn():bdm_wait150()                              									

//Special for Reset
#define BDM_CMD_R(cmd, parameter1, parameter2)      bdm_tx_prepare(),\
                                                    bdm_tx(cmd),\
									                                  bdm_tx(((parameter1)>>8)&0x00ff),\
									                                  bdm_tx(((parameter1)&0x00ff)),\
									                                  bdm_tx(((parameter2))&0x00ff)
									                                  
/* definitions of the actual commands - these should be used in the C-code */
/* all BDM commands need to be called with interrupts disabled (ither by hand or for example from within an ISR) */
/* value is 8 or 16 bit value, addr is 16 bit address, value_p is pointer to 8 or 16 bit variable */
/* FIRMWARE COMMANDS */
#define BDM_CMD_GO()					        BDM_CMD_0_0(_BDM_GO)
#define BDM12_CMD_GO_UNTIL()			    BDM_CMD_0_0(_BDM12_GO_UNTIL)
#define BDM_CMD_TRACE1()				      BDM_CMD_0_0(_BDM_TRACE1)
#define BDM_CMD_TAGGO()					      BDM_CMD_0_0(_BDM_TAGGO)
/* write memory using X as a pointer with automatic pre-increment */ 
#define BDM12_CMD_WRITE_NEXT(value)		BDM_CMD_1W_0(_BDM12_WRITE_NEXT,value)
/* write register commands */
#define BDM12_CMD_WRITE_PC(value)		  BDM_CMD_1W_0(_BDM12_WRITE_PC,value)
#define BDM12_CMD_WRITE_D(value)		  BDM_CMD_1W_0(_BDM12_WRITE_D,value)
#define BDM12_CMD_WRITE_X(value)		  BDM_CMD_1W_0(_BDM12_WRITE_X,value)
#define BDM12_CMD_WRITE_Y(value)		  BDM_CMD_1W_0(_BDM12_WRITE_Y,value)
#define BDM12_CMD_WRITE_SP(value)		  BDM_CMD_1W_0(_BDM12_WRITE_SP,value)
/* read memory using X as a pointer with automatic pre-increment */
#define BDM12_CMD_READ_NEXT(value_p)	BDM_CMD_0_1W(_BDM12_READ_NEXT,value_p)
/* read register commands */
#define BDM12_CMD_READ_PC(value_p)		BDM_CMD_0_1W(_BDM12_READ_PC,value_p)
#define BDM12_CMD_READ_D(value_p)		  BDM_CMD_0_1W(_BDM12_READ_D,value_p)
#define BDM12_CMD_READ_X(value_p)		  BDM_CMD_0_1W(_BDM12_READ_X,value_p)
#define BDM12_CMD_READ_Y(value_p)		  BDM_CMD_0_1W(_BDM12_READ_Y,value_p)
#define BDM12_CMD_READ_SP(value_p)		BDM_CMD_0_1W(_BDM12_READ_SP,value_p)
/* HARDWARE COMMANDS */
#define BDM_CMD_ACK_ENABLE()			    BDM_CMD_0_0(_BDM_ACK_ENABLE)
#define BDM_CMD_ACK_DISABLE() 			  BDM_CMD_0_0(_BDM_ACK_DISABLE)
#define BDM_CMD_BACKGROUND()			    BDM_CMD_0_0(_BDM_BACKGROUND)
/* read and write commands */
#define BDM12_CMD_WRITEW(addr,value)	BDM_CMD_2W_0(_BDM12_WRITE_WORD,addr,value)
#define BDM12_CMD_WRITEB(addr,value)	BDM_CMD_2WB_0(_BDM_WRITE_BYTE,addr,value)
#define BDM12_CMD_READW(addr,value_p)	BDM_CMD_1W_1W(_BDM12_READ_WORD,addr,value_p)
#define BDM12_CMD_READB(addr,value_p)	BDM_CMD_1W_1WB(_BDM_READ_BYTE,addr,value_p)
/* read and writes from/to the BDM memory space */
#define BDM12_CMD_BDWRITEW(addr,value)	BDM_CMD_2W_0(_BDM12_WRITE_BD_WORD,addr,value)
#define BDM12_CMD_BDWRITEB(addr,value)  BDM_CMD_2WB_0(_BDM12_WRITE_BD_BYTE,addr,value)
#define BDM12_CMD_BDREADW(addr,value_p)	BDM_CMD_1W_1W(_BDM12_READ_BD_WORD,addr,value_p)
#define BDM12_CMD_BDREADB(addr,value_p) BDM_CMD_1W_1WB(_BDM12_READ_BD_BYTE,addr,value_p)

/* read register commands */
#define BDM08_CMD_READSTATUS(value_p) BDM_CMD_1C_1SB(_BDM08_READ_STATUS,value_p)
#define BDM08_CMD_WRITECONTROL(value) BDM_CMD_1B_0(_BDM08_WRITE_CONTROL,value )
 #define BDM08_CMD_READB(addr,value_p) 		BDM_CMD_1W_1B(_BDM_READ_BYTE,addr,value_p)
#define BDM08_CMD_WRITEB(addr,value)	BDM_CMD_1W1B_0(_BDM_WRITE_BYTE,addr,value) 
#define BDM08_CMD_Res(addr,value)	   BDM_CMD_R(_BDM_WRITE_BYTE,addr,value) 
 
/* read register commands */
#define BDM08_CMD_READ_PC(value_p)		BDM_CMD_0_1W(_BDM08_READ_PC,value_p)
#define BDM08_CMD_READ_SP(value_p)		BDM_CMD_0_1W(_BDM08_READ_SP,value_p)
#define BDM08_CMD_READ_HX(value_p)		  BDM_CMD_0_1W(_BDM08_READ_HX,value_p)
#define BDM08_CMD_READ_A(value_p)		  BDM_CMD_0_1B(_BDM08_READ_A,value_p)
#define BDM08_CMD_READ_CCR(value_p)		  BDM_CMD_0_1B(_BDM08_READ_CCR,value_p)
#define BDM08_CMD_READ_BKPT(value_p) 		BDM_CMD_0_1W(_BDM08_READ_BKPT,value_p)
 
/* write register commands */
#define BDM08_CMD_WRITE_PC(value)		BDM_CMD_1W_0(_BDM08_WRITE_PC,value)
#define BDM08_CMD_WRITE_SP(value)		BDM_CMD_1W_0(_BDM08_WRITE_SP,value)
#define BDM08_CMD_WRITE_HX(value)		  BDM_CMD_1W_0(_BDM08_WRITE_HX,value)
#define BDM08_CMD_WRITE_A(value)		  BDM_CMD_1B_0(_BDM08_WRITE_A,value)
#define BDM08_CMD_WRITE_CCR(value)		  BDM_CMD_1B_0(_BDM08_WRITE_CCR,value)
#define BDM08_CMD_WRITE_BKPT(value)		  BDM_CMD_1W_0(_BDM08_WRITE_BKPT,value)

/* write memory using X as a pointer with automatic pre-increment */ 
#define BDM08_CMD_WRITE_NEXT(value)		BDM_CMD_1B_0(_BDM08_WRITE_NEXT,value)
 /* read memory using X as a pointer with automatic pre-increment */
#define BDM08_CMD_READ_NEXT(value_p)	BDM_CMD_0_1B(_BDM08_READ_NEXT,value_p)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -