mbed w/ spi bug fig

Dependents:   display-puck

Fork of mbed-src by mbed official

Committer:
emilmont
Date:
Mon Feb 18 11:44:18 2013 +0000
Revision:
2:143cac498751
Parent:
0:fd0d7bdfcdc2
Update mbed sources to Rev 59

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mbed_official 0:fd0d7bdfcdc2 1 /* mbed Microcontroller Library
emilmont 2:143cac498751 2 * Copyright (c) 2006-2013 ARM Limited
mbed_official 0:fd0d7bdfcdc2 3 *
emilmont 2:143cac498751 4 * Licensed under the Apache License, Version 2.0 (the "License");
emilmont 2:143cac498751 5 * you may not use this file except in compliance with the License.
emilmont 2:143cac498751 6 * You may obtain a copy of the License at
mbed_official 0:fd0d7bdfcdc2 7 *
emilmont 2:143cac498751 8 * http://www.apache.org/licenses/LICENSE-2.0
mbed_official 0:fd0d7bdfcdc2 9 *
emilmont 2:143cac498751 10 * Unless required by applicable law or agreed to in writing, software
emilmont 2:143cac498751 11 * distributed under the License is distributed on an "AS IS" BASIS,
emilmont 2:143cac498751 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
emilmont 2:143cac498751 13 * See the License for the specific language governing permissions and
emilmont 2:143cac498751 14 * limitations under the License.
mbed_official 0:fd0d7bdfcdc2 15 */
mbed_official 0:fd0d7bdfcdc2 16 #include "cmsis.h"
mbed_official 0:fd0d7bdfcdc2 17 #include "semihost_api.h"
mbed_official 0:fd0d7bdfcdc2 18
mbed_official 0:fd0d7bdfcdc2 19 #include <stdint.h>
mbed_official 0:fd0d7bdfcdc2 20 #include <string.h>
mbed_official 0:fd0d7bdfcdc2 21
emilmont 2:143cac498751 22 #if DEVICE_SEMIHOST
emilmont 2:143cac498751 23
mbed_official 0:fd0d7bdfcdc2 24 // ARM Semihosting Commands
mbed_official 0:fd0d7bdfcdc2 25 #define SYS_OPEN (0x1)
mbed_official 0:fd0d7bdfcdc2 26 #define SYS_CLOSE (0x2)
mbed_official 0:fd0d7bdfcdc2 27 #define SYS_WRITE (0x5)
mbed_official 0:fd0d7bdfcdc2 28 #define SYS_READ (0x6)
mbed_official 0:fd0d7bdfcdc2 29 #define SYS_ISTTY (0x9)
mbed_official 0:fd0d7bdfcdc2 30 #define SYS_SEEK (0xa)
mbed_official 0:fd0d7bdfcdc2 31 #define SYS_ENSURE (0xb)
mbed_official 0:fd0d7bdfcdc2 32 #define SYS_FLEN (0xc)
mbed_official 0:fd0d7bdfcdc2 33 #define SYS_REMOVE (0xe)
mbed_official 0:fd0d7bdfcdc2 34 #define SYS_RENAME (0xf)
mbed_official 0:fd0d7bdfcdc2 35 #define SYS_EXIT (0x18)
mbed_official 0:fd0d7bdfcdc2 36
mbed_official 0:fd0d7bdfcdc2 37 // mbed Semihosting Commands
emilmont 2:143cac498751 38 #define RESERVED_FOR_USER_APPLICATIONS (0x100) // 0x100 - 0x1ff
mbed_official 0:fd0d7bdfcdc2 39 #define USR_XFFIND (RESERVED_FOR_USER_APPLICATIONS + 0)
mbed_official 0:fd0d7bdfcdc2 40 #define USR_UID (RESERVED_FOR_USER_APPLICATIONS + 1)
mbed_official 0:fd0d7bdfcdc2 41 #define USR_RESET (RESERVED_FOR_USER_APPLICATIONS + 2)
mbed_official 0:fd0d7bdfcdc2 42 #define USR_VBUS (RESERVED_FOR_USER_APPLICATIONS + 3)
mbed_official 0:fd0d7bdfcdc2 43 #define USR_POWERDOWN (RESERVED_FOR_USER_APPLICATIONS + 4)
mbed_official 0:fd0d7bdfcdc2 44 #define USR_DISABLEDEBUG (RESERVED_FOR_USER_APPLICATIONS + 5)
mbed_official 0:fd0d7bdfcdc2 45
mbed_official 0:fd0d7bdfcdc2 46 #if DEVICE_LOCALFILESYSTEM
mbed_official 0:fd0d7bdfcdc2 47 FILEHANDLE semihost_open(const char* name, int openmode) {
mbed_official 0:fd0d7bdfcdc2 48 uint32_t args[3];
mbed_official 0:fd0d7bdfcdc2 49 args[0] = (uint32_t)name;
mbed_official 0:fd0d7bdfcdc2 50 args[1] = (uint32_t)openmode;
mbed_official 0:fd0d7bdfcdc2 51 args[2] = (uint32_t)strlen(name);
mbed_official 0:fd0d7bdfcdc2 52 return __semihost(SYS_OPEN, args);
mbed_official 0:fd0d7bdfcdc2 53 }
mbed_official 0:fd0d7bdfcdc2 54
mbed_official 0:fd0d7bdfcdc2 55 int semihost_close(FILEHANDLE fh) {
mbed_official 0:fd0d7bdfcdc2 56 return __semihost(SYS_CLOSE, &fh);
mbed_official 0:fd0d7bdfcdc2 57 }
mbed_official 0:fd0d7bdfcdc2 58
mbed_official 0:fd0d7bdfcdc2 59 int semihost_write(FILEHANDLE fh, const unsigned char* buffer, unsigned int length, int mode) {
emilmont 2:143cac498751 60 if (length == 0) return 0;
emilmont 2:143cac498751 61
mbed_official 0:fd0d7bdfcdc2 62 uint32_t args[3];
mbed_official 0:fd0d7bdfcdc2 63 args[0] = (uint32_t)fh;
mbed_official 0:fd0d7bdfcdc2 64 args[1] = (uint32_t)buffer;
emilmont 2:143cac498751 65 args[2] = (uint32_t)length;
mbed_official 0:fd0d7bdfcdc2 66 return __semihost(SYS_WRITE, args);
emilmont 2:143cac498751 67 }
mbed_official 0:fd0d7bdfcdc2 68
mbed_official 0:fd0d7bdfcdc2 69 int semihost_read(FILEHANDLE fh, unsigned char* buffer, unsigned int length, int mode) {
mbed_official 0:fd0d7bdfcdc2 70 uint32_t args[3];
mbed_official 0:fd0d7bdfcdc2 71 args[0] = (uint32_t)fh;
mbed_official 0:fd0d7bdfcdc2 72 args[1] = (uint32_t)buffer;
emilmont 2:143cac498751 73 args[2] = (uint32_t)length;
emilmont 2:143cac498751 74 return __semihost(SYS_READ, args);
mbed_official 0:fd0d7bdfcdc2 75 }
mbed_official 0:fd0d7bdfcdc2 76
mbed_official 0:fd0d7bdfcdc2 77 int semihost_istty(FILEHANDLE fh) {
mbed_official 0:fd0d7bdfcdc2 78 return __semihost(SYS_ISTTY, &fh);
mbed_official 0:fd0d7bdfcdc2 79 }
mbed_official 0:fd0d7bdfcdc2 80
mbed_official 0:fd0d7bdfcdc2 81 int semihost_seek(FILEHANDLE fh, long position) {
mbed_official 0:fd0d7bdfcdc2 82 uint32_t args[2];
mbed_official 0:fd0d7bdfcdc2 83 args[0] = (uint32_t)fh;
mbed_official 0:fd0d7bdfcdc2 84 args[1] = (uint32_t)position;
mbed_official 0:fd0d7bdfcdc2 85 return __semihost(SYS_SEEK, args);
mbed_official 0:fd0d7bdfcdc2 86 }
mbed_official 0:fd0d7bdfcdc2 87
mbed_official 0:fd0d7bdfcdc2 88 int semihost_ensure(FILEHANDLE fh) {
mbed_official 0:fd0d7bdfcdc2 89 return __semihost(SYS_ENSURE, &fh);
mbed_official 0:fd0d7bdfcdc2 90 }
mbed_official 0:fd0d7bdfcdc2 91
emilmont 2:143cac498751 92 long semihost_flen(FILEHANDLE fh) {
mbed_official 0:fd0d7bdfcdc2 93 return __semihost(SYS_FLEN, &fh);
mbed_official 0:fd0d7bdfcdc2 94 }
mbed_official 0:fd0d7bdfcdc2 95
mbed_official 0:fd0d7bdfcdc2 96 int semihost_remove(const char *name) {
mbed_official 0:fd0d7bdfcdc2 97 uint32_t args[2];
mbed_official 0:fd0d7bdfcdc2 98 args[0] = (uint32_t)name;
mbed_official 0:fd0d7bdfcdc2 99 args[1] = (uint32_t)strlen(name);
mbed_official 0:fd0d7bdfcdc2 100 return __semihost(SYS_REMOVE, args);
mbed_official 0:fd0d7bdfcdc2 101 }
mbed_official 0:fd0d7bdfcdc2 102
mbed_official 0:fd0d7bdfcdc2 103 int semihost_rename(const char *old_name, const char *new_name) {
mbed_official 0:fd0d7bdfcdc2 104 uint32_t args[4];
mbed_official 0:fd0d7bdfcdc2 105 args[0] = (uint32_t)old_name;
mbed_official 0:fd0d7bdfcdc2 106 args[1] = (uint32_t)strlen(old_name);
mbed_official 0:fd0d7bdfcdc2 107 args[0] = (uint32_t)new_name;
mbed_official 0:fd0d7bdfcdc2 108 args[1] = (uint32_t)strlen(new_name);
mbed_official 0:fd0d7bdfcdc2 109 return __semihost(SYS_RENAME, args);
mbed_official 0:fd0d7bdfcdc2 110 }
mbed_official 0:fd0d7bdfcdc2 111 #endif
mbed_official 0:fd0d7bdfcdc2 112
mbed_official 0:fd0d7bdfcdc2 113 int semihost_exit(void) {
mbed_official 0:fd0d7bdfcdc2 114 uint32_t args[4];
mbed_official 0:fd0d7bdfcdc2 115 return __semihost(SYS_EXIT, args);
mbed_official 0:fd0d7bdfcdc2 116 }
mbed_official 0:fd0d7bdfcdc2 117
mbed_official 0:fd0d7bdfcdc2 118 int semihost_uid(char *uid) {
mbed_official 0:fd0d7bdfcdc2 119 uint32_t args[2];
mbed_official 0:fd0d7bdfcdc2 120 args[0] = (uint32_t)uid;
emilmont 2:143cac498751 121 args[1] = DEVICE_ID_LENGTH + 1;
mbed_official 0:fd0d7bdfcdc2 122 return __semihost(USR_UID, &args);
mbed_official 0:fd0d7bdfcdc2 123 }
mbed_official 0:fd0d7bdfcdc2 124
mbed_official 0:fd0d7bdfcdc2 125 int semihost_reset(void) {
mbed_official 0:fd0d7bdfcdc2 126 // Does not normally return, however if used with older firmware versions
mbed_official 0:fd0d7bdfcdc2 127 // that do not support this call it will return -1.
mbed_official 0:fd0d7bdfcdc2 128 return __semihost(USR_RESET, NULL);
mbed_official 0:fd0d7bdfcdc2 129 }
mbed_official 0:fd0d7bdfcdc2 130
mbed_official 0:fd0d7bdfcdc2 131 int semihost_vbus(void) {
mbed_official 0:fd0d7bdfcdc2 132 return __semihost(USR_VBUS, NULL);
mbed_official 0:fd0d7bdfcdc2 133 }
mbed_official 0:fd0d7bdfcdc2 134
mbed_official 0:fd0d7bdfcdc2 135 int semihost_powerdown(void) {
mbed_official 0:fd0d7bdfcdc2 136 return __semihost(USR_POWERDOWN, NULL);
mbed_official 0:fd0d7bdfcdc2 137 }
mbed_official 0:fd0d7bdfcdc2 138
mbed_official 0:fd0d7bdfcdc2 139 #if !(DEVICE_DEBUG_AWARENESS)
mbed_official 0:fd0d7bdfcdc2 140 // These processors cannot know if the interface is connect, assume so:
mbed_official 0:fd0d7bdfcdc2 141 static int is_debugger_attached = 1;
mbed_official 0:fd0d7bdfcdc2 142
mbed_official 0:fd0d7bdfcdc2 143 int semihost_connected(void) {
mbed_official 0:fd0d7bdfcdc2 144 return is_debugger_attached;
mbed_official 0:fd0d7bdfcdc2 145 }
mbed_official 0:fd0d7bdfcdc2 146 #endif
mbed_official 0:fd0d7bdfcdc2 147
mbed_official 0:fd0d7bdfcdc2 148 int semihost_disabledebug(void) {
mbed_official 0:fd0d7bdfcdc2 149 #if !(DEVICE_DEBUG_AWARENESS)
mbed_official 0:fd0d7bdfcdc2 150 is_debugger_attached = 0;
mbed_official 0:fd0d7bdfcdc2 151 #endif
mbed_official 0:fd0d7bdfcdc2 152 return __semihost(USR_DISABLEDEBUG, NULL);
mbed_official 0:fd0d7bdfcdc2 153 }
mbed_official 0:fd0d7bdfcdc2 154
emilmont 2:143cac498751 155 #endif
emilmont 2:143cac498751 156