ESP8266 ILI9341 display support code with printf sources, wire-frame viewer and custom fonts  1.0
ESP8266ILI9341DisplayProject
mmc_hal.c
Go to the documentation of this file.
1 
27 #include "user_config.h"
28 
29 #ifdef AVR
30 #include <stdlib.h>
31 #endif
32 
33 #include "printf/mathio.h"
34 
35 #include "lib/time.h"
36 #include "lib/timer.h"
37 
38 #ifdef ESP8266
39 #include "esp8266/hspi.h"
40 #endif
41 
42 #include "fatfs.sup/fatfs.h"
43 
44 extern DSTATUS Stat;
45 
48 
51 
52 // @brief MMC media status prescaler
54 
59 static void mmc_task(void)
60 {
61  if(_mmc_timeout)
62  _mmc_timeout--;
63 
64  // 100HZ
65  if(_mmc_pre++ < 10)
66  return;
67 
68  _mmc_pre = 0;
69 
71 
72 }
73 
79 void mmc_install_timer( void )
80 {
81  _mmc_timeout = 0;
82  if(set_timers(mmc_task,1) == -1)
83  printf("MMC Clock task init failed\n");
84 }
85 
89 {
90  chip_select_init(MMC_CS);
91  mmc_slow();
92 }
93 
94 
98 {
99  spi_begin(_mmc_clock,MMC_CS);
100 }
101 
105 {
106  spi_end(MMC_CS);
107 }
108 
113 void mmc_slow()
114 {
115  _mmc_clock = MMC_SLOW;
116 }
117 
118 
123 void mmc_fast()
124 {
125  _mmc_clock = MMC_FAST;
126 }
127 
128 
133 void mmc_spi_TX_buffer(const uint8_t *data, int count)
134 {
135  spi_TX_buffer((uint8_t *) data,count);
136 }
137 
142 void mmc_spi_RX_buffer(const uint8_t *data, int count)
143 {
144  spi_RX_buffer((uint8_t *) data,count);
145 }
146 
151 {
152  return( spi_TXRX(data) );
153 }
154 
155 
160 MEMSPACE
162 {
163  mmc_cli();
164  _mmc_timeout = ms;
165  mmc_sei();
166 }
167 
171 MEMSPACE
173 {
174 
175  if( Stat & STA_NODISK )
176  return(1);
177 
178 #ifdef ESP8266
179  optimistic_yield(1000);
180  wdt_reset();
181 #endif
182  if(!_mmc_timeout)
183  {
184  printf("MMC TIMEOUT\n");
185  Stat |= (STA_NODISK | STA_NOINIT);
186  return(1);
187  }
188  return(0);
189 }
190 
193 MEMSPACE
194 void mmc_ms_wait(int ms)
195 {
196  mmc_set_ms_timeout(ms);
197  while(!mmc_test_timeout())
198  ;
199 }
200 
202 static int mmc_init_flag = 0;
207 MEMSPACE
208 int mmc_init(int verbose)
209 {
210  int rc;
211 
212  Stat = 0;
213 
214  mmc_spi_init();
215 
216  if( verbose)
217  {
218  printf("START MMC INIT\n");
219  }
220  // we only install timers once!
221  if(!mmc_init_flag)
223 
224  if( verbose)
225  {
226 #if defined (_USE_LFN)
227  printf("LFN Enabled");
228 #else
229  printf("LFN Disabled");
230 #endif
231  printf(", Code page: %u\n", _CODE_PAGE);
232  }
233 
234  rc = disk_initialize(0); // aliased to mmc_disk_initialize()
235 
236  if( rc != RES_OK || verbose )
237  {
238  put_rc(rc);
239  }
240 
241  if( rc == RES_OK)
242  {
243  rc = f_mount(&Fatfs[0],"/", 0);
244  }
245 
246  if( rc != RES_OK || verbose)
247  {
248  put_rc( rc );
249  }
250 
251  if (verbose )
252  {
253  DWORD blksize = 0;
254  if(rc == RES_OK)
255  {
256  rc = disk_ioctl ( 0, GET_BLOCK_SIZE, (void *) &blksize);
257  if( rc != RES_OK)
258  {
259  put_rc( rc );
260  printf("MMC Block Size - read failed\n");
261  }
262  else
263  {
264  printf("MMC Block Size: %ld\n", blksize);
265  }
266  if( rc == RES_OK)
267  {
268  fatfs_status("/");
269  }
270  }
271  printf("END MMC INIT\n");
272  }
273  mmc_init_flag = 1;
274 
275  return( rc ) ;
276 }
277 
281 MEMSPACE
283 {
284 }
285 
289 MEMSPACE
291 {
292 }
293 
298 
299 MEMSPACE
301 {
302  return (1);
303 }
304 
305 
306 
311 
312 MEMSPACE
314 {
315  return (0);
316 }
#define GET_BLOCK_SIZE
Definition: diskio.h:64
#define mmc_cli()
Definition: mmc_hal.h:34
#define STA_NOINIT
Definition: diskio.h:53
unsigned short uint16_t
Definition: send.c:18
uint16_t _mmc_pre
Definition: mmc_hal.c:53
void spi_begin(uint32_t clock, int pin)
SPI chip enable function Function waits for current tranaction to finish before proceeding.
Definition: hal.c:355
Master include file for project Includes all project includes and defines here.
Common Linux/POSIX time functions.
static void mmc_task(void)
1000HZ timer task
Definition: mmc_hal.c:59
unsigned int uint32_t
Definition: send.c:19
uint16_t _mmc_timeout
MMC timeout counter in ms.
Definition: mmc_hal.c:47
void mmc_spi_RX_buffer(const uint8_t *data, int count)
SPI read buffer.
Definition: mmc_hal.c:142
void mmc_slow()
MMC set slow SPI bus speed Only called when deselected.
Definition: mmc_hal.c:113
MEMSPACE int set_timers(void(*handler)(void), int timer)
Install a user timer task.
Definition: timer.c:60
uint32_t _mmc_clock
MMC SPI CLOCK cache.
Definition: mmc_hal.c:50
timer functions
void mmc_disk_timerproc(void)
Write Sector(s)
Definition: mmc.c:708
void optimistic_yield(uint32_t interval_us)
Definition: user_task.c:102
MEMSPACE void fatfs_status(char *ptr)
Compute space used, number of directories and files contained used by a drive.
Definition: fatfs_sup.c:268
unsigned long DWORD
Definition: integer.h:31
#define _CODE_PAGE
Definition: ffconf.h:80
void spi_end(uint8_t pin)
SPI chip disable function wait for current tranaction to finish!
Definition: hal.c:388
void chip_select_init(uint8_t pin)
CHIP select HAL.
Definition: hal.c:198
MEMSPACE void mmc_power_off()
MMC Power OFF.
Definition: mmc_hal.c:290
MEMSPACE int mmc_ins_status()
MMC Card Inserted status.
Definition: mmc_hal.c:300
BYTE DSTATUS
Definition: diskio.h:20
MEMSPACE void put_rc(int rc)
display FatFs return code as ascii string
Definition: fatfs_sup.c:145
MEMSPACE int mmc_wp_status()
MMC Card Write Protect status.
Definition: mmc_hal.c:313
DRESULT disk_ioctl(BYTE pdrv, BYTE cmd, void *buff)
Definition: diskio.c:131
Definition: diskio.h:24
uint8_t spi_TXRX(uint8_t data)
SPI read and write 1 byte.
Definition: hal.c:483
MEMSPACE void mmc_install_timer(void)
Install MMC timer task: mmc_task()
Definition: mmc_hal.c:79
MEMSPACE int mmc_init(int verbose)
Initialize MMC and FatFs interface, display diagnostics.
Definition: mmc_hal.c:208
Math IO functions, and verious conversion code with floating point support.
void spi_RX_buffer(const uint8_t *data, int count)
SPI read buffer.
Definition: hal.c:428
void mmc_spi_begin()
MMC SPI setup and chip select.
Definition: mmc_hal.c:97
uint8_t mmc_spi_TXRX(uint8_t data)
SPI read and write 1 byte.
Definition: mmc_hal.c:150
DSTATUS disk_initialize(BYTE pdrv)
Definition: diskio.c:54
void mmc_fast()
MMC fast SPI bus speed Only called when deselected.
Definition: mmc_hal.c:123
MEMSPACE void mmc_ms_wait(int ms)
Wait for time in milliseconds.
Definition: mmc_hal.c:194
void mmc_spi_TX_buffer(const uint8_t *data, int count)
SPI write buffer.
Definition: mmc_hal.c:133
MEMSPACE int mmc_test_timeout()
Wait for timeout.
Definition: mmc_hal.c:172
#define MEMSPACE
Definition: cpu.h:25
MEMSPACE void wdt_reset(void)
reset watchdog
Definition: system.c:190
DSTATUS Stat
Definition: mmc.c:79
MEMSPACE int printf(const char *format,...)
MEMSPACE void mmc_set_ms_timeout(uint16_t ms)
Set MMC timeout timer in Milliseconds.
Definition: mmc_hal.c:161
static int mmc_init_flag
has the MMC interface been initialized yet ?
Definition: mmc_hal.c:202
#define mmc_sei()
Definition: mmc_hal.h:35
void spi_TX_buffer(const uint8_t *data, int count)
SPI write buffer.
Definition: hal.c:414
unsigned char uint8_t
Definition: send.c:17
void mmc_spi_init()
MMC SPI setup and chip select.
Definition: mmc_hal.c:88
#define STA_NODISK
Definition: diskio.h:54
FATFS Fatfs[_VOLUMES]
FatFs Drive Volumes.
Definition: fatfs_sup.c:43
MEMSPACE FRESULT f_mount(FATFS *fs, const TCHAR *path, BYTE opt)
Definition: ff.c:3255
MEMSPACE void mmc_power_on()
MMC Power ON.
Definition: mmc_hal.c:282
void mmc_spi_end()
MMC SPI end and chip deselect.
Definition: mmc_hal.c:104