SPI RAM 23LC1024 (Microchip) with DMA

Dependencies:   mbed

Fork of SPIRAM_23LC1024 by Suga koubou

Committer:
okini3939
Date:
Wed Dec 05 07:56:09 2012 +0000
Revision:
2:a3e0f7f37ac9
DMX

Who changed what in which revision?

UserRevisionLine numberNew contents of line
okini3939 2:a3e0f7f37ac9 1 /*
okini3939 2:a3e0f7f37ac9 2 Copyright (c) 2010 Andy Kirkham
okini3939 2:a3e0f7f37ac9 3
okini3939 2:a3e0f7f37ac9 4 Permission is hereby granted, free of charge, to any person obtaining a copy
okini3939 2:a3e0f7f37ac9 5 of this software and associated documentation files (the "Software"), to deal
okini3939 2:a3e0f7f37ac9 6 in the Software without restriction, including without limitation the rights
okini3939 2:a3e0f7f37ac9 7 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
okini3939 2:a3e0f7f37ac9 8 copies of the Software, and to permit persons to whom the Software is
okini3939 2:a3e0f7f37ac9 9 furnished to do so, subject to the following conditions:
okini3939 2:a3e0f7f37ac9 10
okini3939 2:a3e0f7f37ac9 11 The above copyright notice and this permission notice shall be included in
okini3939 2:a3e0f7f37ac9 12 all copies or substantial portions of the Software.
okini3939 2:a3e0f7f37ac9 13
okini3939 2:a3e0f7f37ac9 14 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
okini3939 2:a3e0f7f37ac9 15 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
okini3939 2:a3e0f7f37ac9 16 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
okini3939 2:a3e0f7f37ac9 17 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
okini3939 2:a3e0f7f37ac9 18 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
okini3939 2:a3e0f7f37ac9 19 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
okini3939 2:a3e0f7f37ac9 20 THE SOFTWARE.
okini3939 2:a3e0f7f37ac9 21 */
okini3939 2:a3e0f7f37ac9 22
okini3939 2:a3e0f7f37ac9 23 #include "MODDMA.h"
okini3939 2:a3e0f7f37ac9 24
okini3939 2:a3e0f7f37ac9 25 #ifndef MBED_H
okini3939 2:a3e0f7f37ac9 26 #include "mbed.h"
okini3939 2:a3e0f7f37ac9 27 #endif
okini3939 2:a3e0f7f37ac9 28
okini3939 2:a3e0f7f37ac9 29 #ifndef MODDMA_CONFIG_H
okini3939 2:a3e0f7f37ac9 30 #include "CONFIG.h"
okini3939 2:a3e0f7f37ac9 31 #endif
okini3939 2:a3e0f7f37ac9 32
okini3939 2:a3e0f7f37ac9 33 namespace AjK {
okini3939 2:a3e0f7f37ac9 34
okini3939 2:a3e0f7f37ac9 35 uint32_t
okini3939 2:a3e0f7f37ac9 36 MODDMA::LUTPerAddr(int n)
okini3939 2:a3e0f7f37ac9 37 {
okini3939 2:a3e0f7f37ac9 38 const uint32_t lut[] = {
okini3939 2:a3e0f7f37ac9 39 (uint32_t)&LPC_SSP0->DR // SSP0 Tx
okini3939 2:a3e0f7f37ac9 40 , (uint32_t)&LPC_SSP0->DR // SSP0 Rx
okini3939 2:a3e0f7f37ac9 41 , (uint32_t)&LPC_SSP1->DR // SSP1 Tx
okini3939 2:a3e0f7f37ac9 42 , (uint32_t)&LPC_SSP1->DR // SSP1 Rx
okini3939 2:a3e0f7f37ac9 43 , (uint32_t)&LPC_ADC->ADGDR // ADC
okini3939 2:a3e0f7f37ac9 44 , (uint32_t)&LPC_I2S->I2STXFIFO // I2S Tx
okini3939 2:a3e0f7f37ac9 45 , (uint32_t)&LPC_I2S->I2SRXFIFO // I2S Rx
okini3939 2:a3e0f7f37ac9 46 , (uint32_t)&LPC_DAC->DACR // DAC
okini3939 2:a3e0f7f37ac9 47 , (uint32_t)&LPC_UART0->THR // UART0 Tx
okini3939 2:a3e0f7f37ac9 48 , (uint32_t)&LPC_UART0->RBR // UART0 Rx
okini3939 2:a3e0f7f37ac9 49 , (uint32_t)&LPC_UART1->THR // UART1 Tx
okini3939 2:a3e0f7f37ac9 50 , (uint32_t)&LPC_UART1->RBR // UART1 Rx
okini3939 2:a3e0f7f37ac9 51 , (uint32_t)&LPC_UART2->THR // UART2 Tx
okini3939 2:a3e0f7f37ac9 52 , (uint32_t)&LPC_UART2->RBR // UART2 Rx
okini3939 2:a3e0f7f37ac9 53 , (uint32_t)&LPC_UART3->THR // UART3 Tx
okini3939 2:a3e0f7f37ac9 54 , (uint32_t)&LPC_UART3->RBR // UART3 Rx
okini3939 2:a3e0f7f37ac9 55 , (uint32_t)&LPC_TIM0->MR0 // MAT0.0
okini3939 2:a3e0f7f37ac9 56 , (uint32_t)&LPC_TIM0->MR1 // MAT0.1
okini3939 2:a3e0f7f37ac9 57 , (uint32_t)&LPC_TIM1->MR0 // MAT1.0
okini3939 2:a3e0f7f37ac9 58 , (uint32_t)&LPC_TIM1->MR1 // MAT1.1
okini3939 2:a3e0f7f37ac9 59 , (uint32_t)&LPC_TIM2->MR0 // MAT2.0
okini3939 2:a3e0f7f37ac9 60 , (uint32_t)&LPC_TIM2->MR1 // MAT2.1
okini3939 2:a3e0f7f37ac9 61 , (uint32_t)&LPC_TIM3->MR0 // MAT3.0
okini3939 2:a3e0f7f37ac9 62 , (uint32_t)&LPC_TIM3->MR1 // MAT3.1
okini3939 2:a3e0f7f37ac9 63 };
okini3939 2:a3e0f7f37ac9 64 return lut[n & 0xFF];
okini3939 2:a3e0f7f37ac9 65 }
okini3939 2:a3e0f7f37ac9 66
okini3939 2:a3e0f7f37ac9 67 uint32_t
okini3939 2:a3e0f7f37ac9 68 MODDMA::Channel_p(int channel)
okini3939 2:a3e0f7f37ac9 69 {
okini3939 2:a3e0f7f37ac9 70 const uint32_t lut[] = {
okini3939 2:a3e0f7f37ac9 71 (uint32_t)LPC_GPDMACH0
okini3939 2:a3e0f7f37ac9 72 , (uint32_t)LPC_GPDMACH1
okini3939 2:a3e0f7f37ac9 73 , (uint32_t)LPC_GPDMACH2
okini3939 2:a3e0f7f37ac9 74 , (uint32_t)LPC_GPDMACH3
okini3939 2:a3e0f7f37ac9 75 , (uint32_t)LPC_GPDMACH4
okini3939 2:a3e0f7f37ac9 76 , (uint32_t)LPC_GPDMACH5
okini3939 2:a3e0f7f37ac9 77 , (uint32_t)LPC_GPDMACH6
okini3939 2:a3e0f7f37ac9 78 , (uint32_t)LPC_GPDMACH7
okini3939 2:a3e0f7f37ac9 79 };
okini3939 2:a3e0f7f37ac9 80 return lut[channel & 0xFF];
okini3939 2:a3e0f7f37ac9 81 }
okini3939 2:a3e0f7f37ac9 82
okini3939 2:a3e0f7f37ac9 83 uint8_t
okini3939 2:a3e0f7f37ac9 84 MODDMA::LUTPerBurst(int n)
okini3939 2:a3e0f7f37ac9 85 {
okini3939 2:a3e0f7f37ac9 86 const uint8_t lut[] = {
okini3939 2:a3e0f7f37ac9 87 (uint8_t)_4 // SSP0 Tx
okini3939 2:a3e0f7f37ac9 88 , (uint8_t)_4 // SSP0 Rx
okini3939 2:a3e0f7f37ac9 89 , (uint8_t)_4 // SSP1 Tx
okini3939 2:a3e0f7f37ac9 90 , (uint8_t)_4 // SSP1 Rx
okini3939 2:a3e0f7f37ac9 91 , (uint8_t)_1 // ADC
okini3939 2:a3e0f7f37ac9 92 , (uint8_t)_32 // I2S channel 0
okini3939 2:a3e0f7f37ac9 93 , (uint8_t)_32 // I2S channel 1
okini3939 2:a3e0f7f37ac9 94 , (uint8_t)_1 // DAC
okini3939 2:a3e0f7f37ac9 95 , (uint8_t)_1 // UART0 Tx
okini3939 2:a3e0f7f37ac9 96 , (uint8_t)_1 // UART0 Rx
okini3939 2:a3e0f7f37ac9 97 , (uint8_t)_1 // UART1 Tx
okini3939 2:a3e0f7f37ac9 98 , (uint8_t)_1 // UART1 Rx
okini3939 2:a3e0f7f37ac9 99 , (uint8_t)_1 // UART2 Tx
okini3939 2:a3e0f7f37ac9 100 , (uint8_t)_1 // UART2 Rx
okini3939 2:a3e0f7f37ac9 101 , (uint8_t)_1 // UART3 Tx
okini3939 2:a3e0f7f37ac9 102 , (uint8_t)_1 // UART3 Rx
okini3939 2:a3e0f7f37ac9 103 , (uint8_t)_1 // MAT0.0
okini3939 2:a3e0f7f37ac9 104 , (uint8_t)_1 // MAT0.1
okini3939 2:a3e0f7f37ac9 105 , (uint8_t)_1 // MAT1.0
okini3939 2:a3e0f7f37ac9 106 , (uint8_t)_1 // MAT1.1
okini3939 2:a3e0f7f37ac9 107 , (uint8_t)_1 // MAT2.0
okini3939 2:a3e0f7f37ac9 108 , (uint8_t)_1 // MAT2.1
okini3939 2:a3e0f7f37ac9 109 , (uint8_t)_1 // MAT3.0
okini3939 2:a3e0f7f37ac9 110 , (uint8_t)_1 // MAT3.1
okini3939 2:a3e0f7f37ac9 111 };
okini3939 2:a3e0f7f37ac9 112 return lut[n & 0xFFF];
okini3939 2:a3e0f7f37ac9 113 }
okini3939 2:a3e0f7f37ac9 114
okini3939 2:a3e0f7f37ac9 115 uint8_t
okini3939 2:a3e0f7f37ac9 116 MODDMA::LUTPerWid(int n)
okini3939 2:a3e0f7f37ac9 117 {
okini3939 2:a3e0f7f37ac9 118 const uint8_t lut[] = {
okini3939 2:a3e0f7f37ac9 119 (uint8_t)byte // SSP0 Tx
okini3939 2:a3e0f7f37ac9 120 , (uint8_t)byte // SSP0 Rx
okini3939 2:a3e0f7f37ac9 121 , (uint8_t)byte // SSP1 Tx
okini3939 2:a3e0f7f37ac9 122 , (uint8_t)byte // SSP1 Rx
okini3939 2:a3e0f7f37ac9 123 , (uint8_t)word // ADC
okini3939 2:a3e0f7f37ac9 124 , (uint8_t)word // I2S channel 0
okini3939 2:a3e0f7f37ac9 125 , (uint8_t)word // I2S channel 1
okini3939 2:a3e0f7f37ac9 126 , (uint8_t)word // DAC
okini3939 2:a3e0f7f37ac9 127 , (uint8_t)byte // UART0 Tx
okini3939 2:a3e0f7f37ac9 128 , (uint8_t)byte // UART0 Rx
okini3939 2:a3e0f7f37ac9 129 , (uint8_t)byte // UART1 Tx
okini3939 2:a3e0f7f37ac9 130 , (uint8_t)byte // UART1 Rx
okini3939 2:a3e0f7f37ac9 131 , (uint8_t)byte // UART2 Tx
okini3939 2:a3e0f7f37ac9 132 , (uint8_t)byte // UART2 Rx
okini3939 2:a3e0f7f37ac9 133 , (uint8_t)byte // UART3 Tx
okini3939 2:a3e0f7f37ac9 134 , (uint8_t)byte // UART3 Rx
okini3939 2:a3e0f7f37ac9 135 , (uint8_t)word // MAT0.0
okini3939 2:a3e0f7f37ac9 136 , (uint8_t)word // MAT0.1
okini3939 2:a3e0f7f37ac9 137 , (uint8_t)word // MAT1.0
okini3939 2:a3e0f7f37ac9 138 , (uint8_t)word // MAT1.1
okini3939 2:a3e0f7f37ac9 139 , (uint8_t)word // MAT2.0
okini3939 2:a3e0f7f37ac9 140 , (uint8_t)word // MAT2.1
okini3939 2:a3e0f7f37ac9 141 , (uint8_t)word // MAT3.0
okini3939 2:a3e0f7f37ac9 142 , (uint8_t)word // MAT3.1
okini3939 2:a3e0f7f37ac9 143 };
okini3939 2:a3e0f7f37ac9 144 return lut[n & 0xFFF];
okini3939 2:a3e0f7f37ac9 145 }
okini3939 2:a3e0f7f37ac9 146
okini3939 2:a3e0f7f37ac9 147 }; // namespace AjK ends