Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Diff: bdm.cpp
- Revision:
- 5:1775b4b13232
- Parent:
- 4:682d96ff6d79
- Child:
- 6:2fbcbebed28c
--- a/bdm.cpp Wed Sep 11 11:55:51 2013 +0000
+++ b/bdm.cpp Sat Apr 25 17:07:08 2015 +0000
@@ -38,6 +38,10 @@
#define CMD_BKPTHIGH '2' ///< pull BKPT high
#define CMD_RESETLOW '3' ///< pull RESET low
#define CMD_RESETHIGH '4' ///< pull RESET high
+#define CMD_BERR_LOW '5' ///< pull BERR low
+#define CMD_BERR_HIGH '6' ///< pull BERR high
+#define CMD_BERR_INPUT '7' ///< make BERR an input
+
#define CMDGROUP_MCU 'c' ///< target MCU management commands
#define CMD_STOPCHIP 'S' ///< stop
@@ -72,6 +76,7 @@
#define CMD_WRITESYSREG 'W' ///< write system register
#define CMD_READADREG 'a' ///< read A/D register
#define CMD_WRITEADREG 'A' ///< write A/D register
+#define CMD_DISPLAYREGS 'd' ///< BD32 like display all registers
#define CMDGROUP_TRIONIC 'T'
#define CMD_TRIONICDUMP 'D' ///< dumps memory contents
@@ -99,7 +104,8 @@
return TERM_ERR
-void bdm() {
+void bdm()
+{
bdm_show_help();
// set up LED pins
@@ -167,7 +173,8 @@
@return command flag (success / failure)
*/
-uint8_t execute_bdm_cmd() {
+uint8_t execute_bdm_cmd()
+{
uint8_t cmd_length = strlen(cmd_buffer);
char cmd = *(cmd_buffer + 1);
@@ -210,6 +217,18 @@
// pull RESET high
case CMD_RESETHIGH:
return reset_high();
+
+ // pull BERR low
+ case CMD_BERR_LOW:
+ return berr_low();
+
+ // pull BERR high
+ case CMD_BERR_HIGH:
+ return berr_high();
+
+ // make BERR an input
+ case CMD_BERR_INPUT:
+ return berr_input();
}
break;
@@ -404,16 +423,20 @@
// registers
case CMDGROUP_REGISTER:
// get register code
- if (cmd_length < 4 || !ascii2int(&cmd_addr, cmd_buffer + 3, 1)) {
+ if (cmd_length == 2 && (cmd != CMD_DISPLAYREGS)) {
// broken parametre
return TERM_ERR;
- }
-
- // get optional value
- if (cmd_length > 4 &&
- !ascii2int(&cmd_value, cmd_buffer + 4, 8)) {
- // broken parametre
- return TERM_ERR;
+ } else {
+ if (cmd_length < 4 || !ascii2int(&cmd_addr, cmd_buffer + 3, 1)) {
+ // broken parametre
+ return TERM_ERR;
+ }
+ // get optional value
+ if (cmd_length > 4 &&
+ !ascii2int(&cmd_value, cmd_buffer + 4, 8)) {
+ // broken parametre
+ return TERM_ERR;
+ }
}
switch (cmd) {
@@ -448,6 +471,85 @@
return (cmd_length == 12 &&
adreg_write((uint8_t)cmd_addr, &cmd_value) == TERM_OK) ?
TERM_OK : TERM_ERR;
+
+ // Display all registers
+ case CMD_DISPLAYREGS:
+ printf(" D0-7");
+ for (uint8_t i = 0; i < 8; i++) {
+ if (adreg_read(&cmd_result, i) != TERM_OK) {
+ return TERM_ERR;
+ }
+ printf(" %08X", cmd_result);
+ }
+//
+ printf("\r\n");
+ printf(" A0-7");
+ for (uint8_t i = 8; i < 16; i++) {
+ if (adreg_read(&cmd_result, i) != TERM_OK) {
+ return TERM_ERR;
+ }
+ printf(" %08X", cmd_result);
+ }
+ printf("\r\n");
+//
+ if (sysreg_read(&cmd_result, 0x0) != TERM_OK) {
+ return TERM_ERR;
+ }
+ printf(" RPC %08X", cmd_result);
+ if (sysreg_read(&cmd_result, 0xC) != TERM_OK) {
+ return TERM_ERR;
+ }
+ printf(" USP %08X", cmd_result);
+ if (sysreg_read(&cmd_result, 0xE) != TERM_OK) {
+ return TERM_ERR;
+ }
+ printf(" SFC %08X SR 10S--210---XNZVC\r\n", cmd_result);
+//
+ if (sysreg_read(&cmd_result, 0x1) != TERM_OK) {
+ return TERM_ERR;
+ }
+ printf(" CPC %08X", cmd_result);
+ if (sysreg_read(&cmd_result, 0xD) != TERM_OK) {
+ return TERM_ERR;
+ }
+ printf(" SSP %08X", cmd_result);
+ if (sysreg_read(&cmd_result, 0xF) != TERM_OK) {
+ return TERM_ERR;
+ }
+ printf(" DFC %08X", cmd_result);
+ if (sysreg_read(&cmd_result, 0xB) != TERM_OK) {
+ return TERM_ERR;
+ }
+ printf(" %04X ", cmd_result);
+ for (uint32_t i = 0; i < 16; i++) {
+ cmd_result & (1 << (15-i)) ? printf("1") : printf("0");
+ }
+ printf("\r\n");
+//
+ if (sysreg_read(&cmd_result, 0xA)!= TERM_OK) {
+ return TERM_ERR;
+ }
+ printf(" VBR %08X", cmd_result);
+ if (sysreg_read(&cmd_result, 0x8)!= TERM_OK) {
+ return TERM_ERR;
+ }
+ printf(" ATEMP %08X", cmd_result);
+ if (sysreg_read(&cmd_result, 0x9) != TERM_OK) {
+ return TERM_ERR;
+ }
+ printf(" FAR %08X\r\n", cmd_result);
+//
+ printf(" !CONNNECTED:%d", PIN_NC.read());
+ printf(" POWER:%d", PIN_PWR.read());
+ printf(" !RESET:%d", PIN_RESET.read());
+ printf(" !BUSERR:%d", PIN_BERR.read());
+ printf(" BKPT/DSCLK:%d", PIN_BKPT.read());
+ printf(" FREEZE:%d", PIN_FREEZE.read());
+ printf(" DSO:%d", PIN_DSO.read());
+ printf(" DSI:%d", PIN_DSI.read());
+ printf("\r\n");
+//
+ return TERM_OK;
}
break;
@@ -482,7 +584,8 @@
return TERM_ERR;
}
-void bdm_show_help() {
+void bdm_show_help()
+{
printf("Just4Trionic BDM Command Menu\r\n");
printf("=============================\r\n");
printf("TD - and DUMP T5 FLASH BIN file\r\n");
@@ -496,7 +599,8 @@
printf("\r\n");
return;
}
-void bdm_show_full_help() {
+void bdm_show_full_help()
+{
printf("Just4Trionic BDM Command Menu\r\n");
printf("=============================\r\n");
printf("TD - and DUMP T5 FLASH BIN file\r\n");
@@ -512,6 +616,9 @@
printf("a2 - pull BKPT high\r\n");
printf("a3 - pull RESET low\r\n");
printf("a4 - pull RESET high\r\n");
+ printf("a5 - pull BERR low\r\n");
+ printf("a6 - pull BERR high\r\n");
+ printf("a7 - make BERR an input\r\n");
printf("\r\n");
printf("MCU Management Commands - c\r\n");
printf("===========================\r\n");
@@ -563,6 +670,7 @@
printf("\r\n");
printf("MCU Register Commands - r\r\n");
printf("=========================\r\n");
+ printf("rd Display all registers (like BD32)\r\n");
printf("rrRR - read system register RR\r\n");
printf(" 00 - RPC, 01 - PCC, 0B - SR, 0C - USP, 0D - SSP\r\n");
printf(" 0e - SFC, 0f - DFC, 08 - ATEMP, 09 - FAR, 0a - VBR\r\n");