Files
m68k-bdm/m68k/tblcf/tblcf.h
Bernd Mueller adfd70813f initial push
2026-06-17 13:44:30 +02:00

211 lines
8.7 KiB
C

/*
Turbo BDM Light ColdFire
Copyright (C) 2006 Daniel Malik
Changed to support the BDM project.
Chris Johns (cjohns@user.sourgeforge.net)
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#ifndef TBLCF_H
#define TBLCF_H
#define WRITE_BLOCK_CHECK /* Keep on. CCJ */
typedef enum { /* type of BDM target */
CF_BDM=0,
JTAG=1
} target_type_e;
typedef enum { /* type of reset action required */
BDM_MODE=0,
NORMAL_MODE=1
} target_mode_e;
typedef enum { /* target reset detection state */
RESET_NOT_DETECTED=0,
RESET_DETECTED=1
} reset_detection_e;
typedef enum { /* target reset state */
RSTO_ACTIVE=0,
RSTO_INACTIVE=1
} reset_state_e;
typedef struct { /* state of BDM communication */
reset_state_e reset_state;
reset_detection_e reset_detection;
} bdmcf_status_t;
/* returns version of the DLL in BCD format */
unsigned char tblcf_version(void);
/* initialises USB and returns number of devices found */
unsigned char tblcf_init(void);
/* opens a device with given number (0...), returns 0 on success and 1 on error */
int tblcf_open(const char *device);
/* closes currently open device */
void tblcf_close(int dev);
/* returns hardware & software version of the cable in BCD format - SW version
* in lower byte and HW version in upper byte */
unsigned int tblcf_get_version(int dev);
/* returns status of the last command: 0 on sucess and non-zero on failure */
unsigned char tblcf_get_last_sts(int dev);
/* returns status of the last command value */
unsigned char tblcf_get_last_sts_value(int dev);
/* requests bootloader execution on new power-up, returns 0 on success and
* non-zero on failure */
unsigned char tblcf_request_boot(int dev);
/* sets target MCU type; returns 0 on success and non-zero on failure */
unsigned char tblcf_set_target_type(int dev, target_type_e target_type);
/* resets the target to normal or BDM mode; returns 0 on success and non-zero
* on failure */
unsigned char tblcf_target_reset(int dev, target_mode_e target_mode);
/* fills user supplied structure with current state of the BDM communication
* channel; returns 0 on success and non-zero on failure */
unsigned char tblcf_bdm_sts(int dev, bdmcf_status_t *bdmcf_status);
/* brings the target into BDM mode; returns 0 on success and non-zero on
* failure */
unsigned char tblcf_target_halt(int dev);
/* starts target execution from current PC address; returns 0 on success and
* non-zero on failure */
unsigned char tblcf_target_go(int dev);
/* steps over a single target instruction; returns 0 on success and non-zero on
* failure */
unsigned char tblcf_target_step(int dev);
/* resynchronizes communication with the target (in case of noise, etc.);
* returns 0 on success and non-zero on failure */
unsigned char tblcf_resynchronize(int dev);
/* asserts the TA signal for the specified time (in 10us ticks); returns 0 on
* success and non-zero on failure */
unsigned char tblcf_assert_ta(int dev, unsigned char duration_10us);
/* reads control register at the specified address and writes its contents into
* the supplied buffer; returns 0 on success and non-zero on failure */
unsigned char tblcf_read_creg(int dev, unsigned int address, unsigned long int * result);
/* writes control register at the specified address; returns 0 on success and
* non-zero on failure */
void tblcf_write_creg(int dev, unsigned int address, unsigned long int value);
/* reads the specified debug register and writes its contents into the
* supplied buffer; returns 0 on success and non-zero on failure */
unsigned char tblcf_read_dreg(int dev, unsigned char dreg_index, unsigned long int * result);
/* writes specified debug register */
void tblcf_write_dreg(int dev, unsigned char dreg_index, unsigned long int value);
/* reads the specified register and writes its contents into the supplied
* buffer; returns 0 on success and non-zero on failure */
unsigned char tblcf_read_reg(int dev, unsigned char reg_index, unsigned long int * result);
/* writes specified register */
void tblcf_write_reg(int dev, unsigned char reg_index, unsigned long int value);
/* reads byte from the specified address; returns 0 on success and non-zero on
* failure */
unsigned char tblcf_read_mem8(int dev, unsigned long int address, unsigned char * result);
/* reads word from the specified address; returns 0 on success and non-zero on
* failure */
unsigned char tblcf_read_mem16(int dev, unsigned long int address, unsigned int * result);
/* reads long word from the specified address; returns 0 on success and
* non-zero on failure */
unsigned char tblcf_read_mem32(int dev, unsigned long int address, unsigned long int * result);
/* writes byte at the specified address */
void tblcf_write_mem8(int dev, unsigned long int address, unsigned char value);
/* writes word at the specified address */
void tblcf_write_mem16(int dev, unsigned long int address, unsigned int value);
/* writes long word at the specified address */
void tblcf_write_mem32(int dev, unsigned long int address, unsigned long int value);
/* reads the requested number of bytes from target memory from the supplied
* address and stores results into the user supplied buffer; uses byte accesses
* only; returns 0 on success and non-zero on failure */
unsigned char tblcf_read_block8(int dev, unsigned long int address,
unsigned long int bytecount, unsigned char *buffer);
/* reads the requested number of bytes from target memory from the supplied
* address and stores results into the user supplied buffer; uses word
* accesses; returns 0 on success and non-zero on failure */
unsigned char tblcf_read_block16(int dev, unsigned long int address,
unsigned long int bytecount, unsigned char *buffer);
/* reads the requested number of bytes from target memory from the supplied
* address and stores results into the user supplied buffer; uses long word
* accesses; returns 0 on success and non-zero on failure */
unsigned char tblcf_read_block32(int dev, unsigned long int address,
unsigned long int bytecount, unsigned char *buffer);
/* writes the requested number of bytes to target memory from the supplied
* address; uses byte accesses only; returns 0 on success and non-zero on
* failure (must be compiled with WRITE_BLOCK_CHECK, otherwise always returns
* 0) */
unsigned char tblcf_write_block8(int dev, unsigned long int address,
unsigned long int bytecount, unsigned char *buffer);
/* writes the requested number of bytes to target memory at the supplied
* address; uses word accesses; returns 0 on success and non-zero on failure
* (must be compiled with WRITE_BLOCK_CHECK, otherwise always returns 0) */
unsigned char tblcf_write_block16(int dev, unsigned long int address,
unsigned long int bytecount, unsigned char *buffer);
/* writes the requested number of bytes to target memory at the supplied
* address; uses long word accesses; returns 0 on success and non-zero on
* failure (must be compiled with WRITE_BLOCK_CHECK, otherwise always returns
* 0) */
unsigned char tblcf_write_block32(int dev, unsigned long int address,
unsigned long int bytecount, unsigned char *buffer);
/* JTAG - go from RUN-TEST/IDLE to SHIFT-DR (mode==0) or SHIFT-IR (mode!=0)
* state */
unsigned char tblcf_jtag_sel_shift(int dev, unsigned char mode);
/* JTAG - go from RUN-TEST/IDLE to TEST-LOGIC-RESET state */
unsigned char tblcf_jtag_sel_reset(int dev);
/* JTAG - write data; parameter exit: ==0 : stay in SHIFT-xx, !=0 : go to
* RUN-TEST/IDLE when done; data: shifted in LSB (last byte) first, unused bits
* (if any) are in the MSB (first) byte */
void tblcf_jtag_write(int dev, unsigned char bit_count,
unsigned char exit, unsigned char *buffer);
/* JTAG - read data; parameter exit: ==0 : stay in SHIFT-xx, !=0 : go to
* RUN-TEST/IDLE when done; data: shifted in LSB (last byte) first, unused bits
* (if any) are in the MSB (first) byte */
unsigned char tblcf_jtag_read(int dev, unsigned char bit_count,
unsigned char exit, unsigned char *buffer);
#endif