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.
ssp0.c
00001 /**************************************************************************** 00002 * Copyright 2010 Andy Kirkham, Stellar Technologies Ltd 00003 * 00004 * This file is part of the Satellite Observers Workbench (SOWB). 00005 * 00006 * SOWB is free software: you can redistribute it and/or modify 00007 * it under the terms of the GNU General Public License as published by 00008 * the Free Software Foundation, either version 3 of the License, or 00009 * (at your option) any later version. 00010 * 00011 * SOWB is distributed in the hope that it will be useful, 00012 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00013 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00014 * GNU General Public License for more details. 00015 * 00016 * You should have received a copy of the GNU General Public License 00017 * along with SOWB. If not, see <http://www.gnu.org/licenses/>. 00018 * 00019 * $Id: main.cpp 5 2010-07-12 20:51:11Z ajk $ 00020 * 00021 ***************************************************************************/ 00022 00023 #include "sowb.h" 00024 #include "debug.h" 00025 #include "ssp0.h" 00026 00027 bool ssp0_in_use; 00028 00029 bool SSP0_request(void) { 00030 if (!ssp0_in_use) { 00031 ssp0_in_use = true; 00032 return true; 00033 } 00034 return false; 00035 } 00036 00037 void SSP0_release(void) { 00038 ssp0_in_use = false; 00039 } 00040 00041 /* Declare ISR callbacks. */ 00042 extern int flash_read_ssp0_irq(void); 00043 extern int flash_write_ssp0_irq(void); 00044 00045 /* Function pointer type for the following table. */ 00046 typedef int (*SSP0_callback)(void); 00047 00048 /* Define an array of callbacks to make. */ 00049 const SSP0_callback ssp0_callbacks[] = { 00050 flash_read_ssp0_irq, 00051 flash_write_ssp0_irq, 00052 NULL 00053 }; 00054 00055 /** SSP0_IRQHandler 00056 */ 00057 extern "C" void SSP0_IRQHandler(void) __irq { 00058 for (int i = 0; ssp0_callbacks[i] != NULL; i++) { 00059 if ((ssp0_callbacks[i])() != 0) { 00060 break; 00061 } 00062 } 00063 } 00064 00065 /** SSP0_init 00066 */ 00067 void SSP0_init(void) { 00068 00069 DEBUG_INIT_START; 00070 00071 ssp0_in_use = false; 00072 00073 /* The flash device is connected to SSP1 via the Mbed pins. 00074 So this init is about configuring just the SSP1. */ 00075 00076 /* Enable the SSP1 peripheral. */ 00077 //LPC_SC->PCONP |= (1UL << 10); 00078 LPC_SC->PCONP |= (1UL << 21); 00079 00080 /* Select the clock required for SSP1. */ 00081 LPC_SC->PCLKSEL1 &= ~(3UL << 10); 00082 LPC_SC->PCLKSEL1 |= (3UL << 10); 00083 //LPC_SC->PCLKSEL0 &= ~(3UL << 20); 00084 //LPC_SC->PCLKSEL0 |= (3UL << 20); 00085 00086 /* Select the GPIO pins for the SSP0 functions. */ 00087 /* SCK0 */ 00088 LPC_PINCON->PINSEL0 &= ~(3UL << 30); 00089 LPC_PINCON->PINSEL0 |= (2UL << 30); 00090 /* MISO0 */ 00091 LPC_PINCON->PINSEL1 &= ~(3UL << 2); 00092 LPC_PINCON->PINSEL1 |= (2UL << 2); 00093 /* MISI0 */ 00094 LPC_PINCON->PINSEL1 &= ~(3UL << 4); 00095 LPC_PINCON->PINSEL1 |= (2UL << 4); 00096 00097 /* Select the GPIO pins for the SSP1 functions. */ 00098 /* SCK1 */ 00099 //LPC_PINCON->PINSEL0 &= ~(3UL << 14); 00100 //LPC_PINCON->PINSEL0 |= (2UL << 14); 00101 /* MISO1 */ 00102 //LPC_PINCON->PINSEL0 &= ~(3UL << 16); 00103 //LPC_PINCON->PINSEL0 |= (2UL << 16); 00104 /* MOSI1 */ 00105 //LPC_PINCON->PINSEL0 &= ~(3UL << 18); 00106 //LPC_PINCON->PINSEL0 |= (2UL << 18); 00107 00108 /* Note, we don't use SSEL1 in our design, we just use a standard GPIO 00109 because writing multi-byte data is simpler. */ 00110 00111 /* Setup the interrupt system. Note however, the SSP1 interrupt 00112 is only actually activated within the DMA ISR and is self disabling. */ 00113 NVIC_SetVector(SSP0_IRQn, (uint32_t)SSP0_IRQHandler); 00114 NVIC_EnableIRQ(SSP0_IRQn); 00115 00116 /* Setup the control registers for SSP1 */ 00117 LPC_SSP0->IMSC = 0; 00118 LPC_SSP0->CR0 = 0x7; 00119 LPC_SSP0->CPSR = FLASH_SSP_INIT_CPSR; 00120 LPC_SSP0->CR1 = 0x2; 00121 00122 DEBUG_INIT_END; 00123 } 00124
Generated on Tue Jul 12 2022 18:05:35 by
1.7.2