mbed library sources. Supersedes mbed-src. Fixes analogIn and analogOut problems for TARGET_STM32F3. Tested on NUCLEO-F303K8, using 3 analogout and 7 analogin channels simultaneously. Added ability for STM32F334R8 and STM32F303K8 to use all three channels of DAC simultaneously. https://developer.mbed.org/users/StevieWray/code/mbed-dev/ Added ability for TARGET_STM32F3 to use more than one ADC simultaneously. https://developer.mbed.org/questions/67997/NUCLEO-F303K8ADC/
Fork of mbed-dev by
api/semihost_api.h@70:b3a5af880266, 2016-02-23 (annotated)
- Committer:
- neurofun
- Date:
- Tue Feb 23 21:59:35 2016 +0000
- Revision:
- 70:b3a5af880266
- Parent:
- 0:9b334a45a8ff
Edited DAC routines to allow for the simultaneous use of three channels from two DACs as seen on the STM32F334R8 and STM32F303K8. Edited ADC routines to allow for the simultaneous use of more than one ADC.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
bogdanm | 0:9b334a45a8ff | 1 | /* mbed Microcontroller Library |
bogdanm | 0:9b334a45a8ff | 2 | * Copyright (c) 2006-2013 ARM Limited |
bogdanm | 0:9b334a45a8ff | 3 | * |
bogdanm | 0:9b334a45a8ff | 4 | * Licensed under the Apache License, Version 2.0 (the "License"); |
bogdanm | 0:9b334a45a8ff | 5 | * you may not use this file except in compliance with the License. |
bogdanm | 0:9b334a45a8ff | 6 | * You may obtain a copy of the License at |
bogdanm | 0:9b334a45a8ff | 7 | * |
bogdanm | 0:9b334a45a8ff | 8 | * http://www.apache.org/licenses/LICENSE-2.0 |
bogdanm | 0:9b334a45a8ff | 9 | * |
bogdanm | 0:9b334a45a8ff | 10 | * Unless required by applicable law or agreed to in writing, software |
bogdanm | 0:9b334a45a8ff | 11 | * distributed under the License is distributed on an "AS IS" BASIS, |
bogdanm | 0:9b334a45a8ff | 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
bogdanm | 0:9b334a45a8ff | 13 | * See the License for the specific language governing permissions and |
bogdanm | 0:9b334a45a8ff | 14 | * limitations under the License. |
bogdanm | 0:9b334a45a8ff | 15 | */ |
bogdanm | 0:9b334a45a8ff | 16 | #ifndef MBED_SEMIHOST_H |
bogdanm | 0:9b334a45a8ff | 17 | #define MBED_SEMIHOST_H |
bogdanm | 0:9b334a45a8ff | 18 | |
bogdanm | 0:9b334a45a8ff | 19 | #include "device.h" |
bogdanm | 0:9b334a45a8ff | 20 | #include "toolchain.h" |
bogdanm | 0:9b334a45a8ff | 21 | |
bogdanm | 0:9b334a45a8ff | 22 | #ifdef __cplusplus |
bogdanm | 0:9b334a45a8ff | 23 | extern "C" { |
bogdanm | 0:9b334a45a8ff | 24 | #endif |
bogdanm | 0:9b334a45a8ff | 25 | |
bogdanm | 0:9b334a45a8ff | 26 | #if DEVICE_SEMIHOST |
bogdanm | 0:9b334a45a8ff | 27 | |
bogdanm | 0:9b334a45a8ff | 28 | #ifndef __CC_ARM |
bogdanm | 0:9b334a45a8ff | 29 | |
bogdanm | 0:9b334a45a8ff | 30 | #if defined(__ICCARM__) |
bogdanm | 0:9b334a45a8ff | 31 | inline int __semihost(int reason, const void *arg) { |
bogdanm | 0:9b334a45a8ff | 32 | return __semihosting(reason, (void*)arg); |
bogdanm | 0:9b334a45a8ff | 33 | } |
bogdanm | 0:9b334a45a8ff | 34 | #else |
bogdanm | 0:9b334a45a8ff | 35 | |
bogdanm | 0:9b334a45a8ff | 36 | #ifdef __thumb__ |
bogdanm | 0:9b334a45a8ff | 37 | # define AngelSWI 0xAB |
bogdanm | 0:9b334a45a8ff | 38 | # define AngelSWIInsn "bkpt" |
bogdanm | 0:9b334a45a8ff | 39 | # define AngelSWIAsm bkpt |
bogdanm | 0:9b334a45a8ff | 40 | #else |
bogdanm | 0:9b334a45a8ff | 41 | # define AngelSWI 0x123456 |
bogdanm | 0:9b334a45a8ff | 42 | # define AngelSWIInsn "swi" |
bogdanm | 0:9b334a45a8ff | 43 | # define AngelSWIAsm swi |
bogdanm | 0:9b334a45a8ff | 44 | #endif |
bogdanm | 0:9b334a45a8ff | 45 | |
bogdanm | 0:9b334a45a8ff | 46 | static inline int __semihost(int reason, const void *arg) { |
bogdanm | 0:9b334a45a8ff | 47 | int value; |
bogdanm | 0:9b334a45a8ff | 48 | |
bogdanm | 0:9b334a45a8ff | 49 | asm volatile ( |
bogdanm | 0:9b334a45a8ff | 50 | "mov r0, %1" "\n\t" |
bogdanm | 0:9b334a45a8ff | 51 | "mov r1, %2" "\n\t" |
bogdanm | 0:9b334a45a8ff | 52 | AngelSWIInsn " %a3" "\n\t" |
bogdanm | 0:9b334a45a8ff | 53 | "mov %0, r0" |
bogdanm | 0:9b334a45a8ff | 54 | : "=r" (value) /* output operands */ |
bogdanm | 0:9b334a45a8ff | 55 | : "r" (reason), "r" (arg), "i" (AngelSWI) /* input operands */ |
bogdanm | 0:9b334a45a8ff | 56 | : "r0", "r1", "r2", "r3", "ip", "lr", "memory", "cc" /* list of clobbered registers */ |
bogdanm | 0:9b334a45a8ff | 57 | ); |
bogdanm | 0:9b334a45a8ff | 58 | |
bogdanm | 0:9b334a45a8ff | 59 | return value; |
bogdanm | 0:9b334a45a8ff | 60 | } |
bogdanm | 0:9b334a45a8ff | 61 | #endif |
bogdanm | 0:9b334a45a8ff | 62 | #endif |
bogdanm | 0:9b334a45a8ff | 63 | |
bogdanm | 0:9b334a45a8ff | 64 | #if DEVICE_LOCALFILESYSTEM |
bogdanm | 0:9b334a45a8ff | 65 | FILEHANDLE semihost_open(const char* name, int openmode); |
bogdanm | 0:9b334a45a8ff | 66 | int semihost_close (FILEHANDLE fh); |
bogdanm | 0:9b334a45a8ff | 67 | int semihost_read (FILEHANDLE fh, unsigned char* buffer, unsigned int length, int mode); |
bogdanm | 0:9b334a45a8ff | 68 | int semihost_write (FILEHANDLE fh, const unsigned char* buffer, unsigned int length, int mode); |
bogdanm | 0:9b334a45a8ff | 69 | int semihost_ensure(FILEHANDLE fh); |
bogdanm | 0:9b334a45a8ff | 70 | long semihost_flen (FILEHANDLE fh); |
bogdanm | 0:9b334a45a8ff | 71 | int semihost_seek (FILEHANDLE fh, long position); |
bogdanm | 0:9b334a45a8ff | 72 | int semihost_istty (FILEHANDLE fh); |
bogdanm | 0:9b334a45a8ff | 73 | |
bogdanm | 0:9b334a45a8ff | 74 | int semihost_remove(const char *name); |
bogdanm | 0:9b334a45a8ff | 75 | int semihost_rename(const char *old_name, const char *new_name); |
bogdanm | 0:9b334a45a8ff | 76 | #endif |
bogdanm | 0:9b334a45a8ff | 77 | |
bogdanm | 0:9b334a45a8ff | 78 | int semihost_uid(char *uid); |
bogdanm | 0:9b334a45a8ff | 79 | int semihost_reset(void); |
bogdanm | 0:9b334a45a8ff | 80 | int semihost_vbus(void); |
bogdanm | 0:9b334a45a8ff | 81 | int semihost_powerdown(void); |
bogdanm | 0:9b334a45a8ff | 82 | int semihost_exit(void); |
bogdanm | 0:9b334a45a8ff | 83 | |
bogdanm | 0:9b334a45a8ff | 84 | int semihost_connected(void); |
bogdanm | 0:9b334a45a8ff | 85 | int semihost_disabledebug(void); |
bogdanm | 0:9b334a45a8ff | 86 | |
bogdanm | 0:9b334a45a8ff | 87 | #endif |
bogdanm | 0:9b334a45a8ff | 88 | |
bogdanm | 0:9b334a45a8ff | 89 | #ifdef __cplusplus |
bogdanm | 0:9b334a45a8ff | 90 | } |
bogdanm | 0:9b334a45a8ff | 91 | #endif |
bogdanm | 0:9b334a45a8ff | 92 | |
bogdanm | 0:9b334a45a8ff | 93 | #endif |