Sophie Dexter
/
Just4Trionic
Just4Trionic - CAN and BDM FLASH programmer for Saab cars
Diff: bdmcpu32.h
- Revision:
- 1:d5452e398b76
- Child:
- 2:bf3a2b29259a
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/bdmcpu32.h Tue Sep 14 21:02:04 2010 +0000 @@ -0,0 +1,108 @@ +/******************************************************************************* + +bdmcpu32.h +(c) 2010 by Sophie Dexter + +A derivative work based on: +//----------------------------------------------------------------------------- +// CAN/BDM adapter firmware +// (C) Janis Silins, 2010 +// $id$ +//----------------------------------------------------------------------------- + +******************************************************************************** + +WARNING: Use at your own risk, sadly this software comes with no guarantees. +This software is provided 'free' and in good faith, but the author does not +accept liability for any damage arising from its use. + +*******************************************************************************/ + +#ifndef __BDMCPU32_H__ +#define __BDMCPU32_H__ + +#include "mbed.h" + +#include "common.h" +#include "bdmtrionic.h" +//#include "BDM.h" + + +// MCU status macros +#ifndef IGNORE_VCC_PIN + #define IS_CONNECTED (PIN_PWR) +#else + #define IS_CONNECTED true +#endif // IGNORE_VCC_PIN + +#define IN_BDM (PIN_FREEZE) +#define IS_RUNNING (PIN_RESET && !IN_BDM) + +// MCU management +uint8_t stop_chip(); +uint8_t reset_chip(); +uint8_t run_chip(const uint32_t* addr); +uint8_t restart_chip(); +uint8_t step_chip(); +uint8_t bkpt_low(); +uint8_t bkpt_high(); +uint8_t reset_low(); +uint8_t reset_high(); + +// memory +uint8_t memread_byte(uint8_t* result, const uint32_t* addr); +uint8_t memread_word(uint16_t* result, const uint32_t* addr); +uint8_t memread_long(uint32_t* result, const uint32_t* addr); +uint8_t memdump_byte(uint8_t* result); +uint8_t memdump_word(uint16_t* result); +uint8_t memdump_long(uint32_t* result); +uint8_t memwrite_byte(const uint32_t* addr, uint8_t value); +uint8_t memwrite_word(const uint32_t* addr, uint16_t value); +uint8_t memwrite_long(const uint32_t* addr, const uint32_t* value); +uint8_t memfill_byte(uint8_t value); +uint8_t memfill_word(uint16_t value); +uint8_t memfill_long(const uint32_t* value); + +// memory split commands +// Setup a start of a sequence of BDM operations +// read commands +uint8_t memread_byte_cmd(const uint32_t* addr); +uint8_t memread_word_cmd(const uint32_t* addr); +uint8_t memread_long_cmd(const uint32_t* addr); +// write commands +uint8_t memwrite_byte_cmd(const uint32_t* addr); +uint8_t memwrite_word_cmd(const uint32_t* addr); +uint8_t memwrite_long_cmd(const uint32_t* addr); +// follow on commands +// dump bytes/words/longs +uint8_t memget_word(uint16_t* result); +uint8_t memget_long(uint32_t* result); +// read and write bytes +uint8_t memwrite_write_byte(const uint32_t* addr, const uint8_t value); +uint8_t memwrite_read_byte(const uint32_t* addr, const uint8_t value); +uint8_t memwrite_nop_byte(const uint32_t* addr, const uint8_t value); +uint8_t memread_read_byte(uint8_t* result, const uint32_t* addr); +uint8_t memread_write_byte(uint8_t* result, const uint32_t* addr); +uint8_t memread_nop_byte(uint8_t* result, const uint32_t* addr); +// +uint8_t memwrite_word_write_word(const uint32_t* addr, const uint16_t value1, const uint16_t value2); +uint8_t memwrite_word_read_word(uint16_t* result, const uint32_t* addr, const uint16_t value); + + +// registers +uint8_t sysreg_read(uint32_t* result, uint8_t reg); +uint8_t sysreg_write(uint8_t reg, const uint32_t* value); +uint8_t adreg_read(uint32_t* result, uint8_t reg); +uint8_t adreg_write(uint8_t reg, const uint32_t* value); + +// bdm part commands +bool bdm_command (uint16_t cmd); +bool bdm_address (const uint32_t* addr); +bool bdm_get (uint32_t* result, uint8_t size, uint16_t next_cmd); +bool bdm_put (const uint32_t* value, uint8_t size); +bool bdm_ready (uint16_t next_cmd); + +#endif // __BDMCPU32_H__ +//----------------------------------------------------------------------------- +// EOF +//----------------------------------------------------------------------------- \ No newline at end of file