📄 main.c
字号:
//*****************************************************************************// Based on software by Pascal Stang, distributed under the GNU public license// March 06 TWard Ported to ecog1k, added support for SD cards//*****************************************************************************#include <ecog.h>#include <ecog1.h>#include "stdio.h"#include "mmc.h" // include MMC card access functions#include "mmcConf.h"void mmcTest(void);void debugPrintHexTable(unsigned int length, unsigned char *buffer);// Global card initialiser variableint mmcCardInFlag;//----- Begin Code ------------------------------------------------------------int main(int argc, char* argv[]){ mmcTest(); return (0);}void mmcTest(void){ unsigned long sector = 0; unsigned char buffer[0x200]; int c; unsigned int d; // initialize MMC interface mmcInit(); // print new prompt printf("\r\ncmd>"); // testing loop while(1) { if (mmcCardInFlag == 1) { // A card has been inserted, reset mmcCardInFlag = 0; printf("\r\nDetecting & resetting SD/MMC Card..."); // We should provide a delay of half a second or so here for (c = 0; c < 32000; c++) { for (d = 0; d < 50; d++) nop(); } if (!mmcReset()) { printf("Found SD Memory Card\n\r"); } else { LED0_Clr = 1; LED1_Clr = 1; printf("\n\rProblem Initialising Card!!\r\n"); } // print new prompt printf("\r\ncmd>"); } else { // check for keypress if (fd.duart.a_sts.rx_1b_rdy) { c = fd.duart.a_rx.data_1byte; switch(c) { case 'i': // initialize card mmcCardInFlag = 1; break; case 'r': // read current sector into buffer printf("\r\nRead Sector %ld\r\n", sector); mmcRead(sector, buffer); // print buffer contents debugPrintHexTable(0x200, buffer); break; case 'w': // write current sector with data from buffer printf("\r\nWrite Sector %ld\r\n", sector); mmcWrite(sector, buffer); break; // move to new sector case '+': sector++; printf("\r\nSector = %ld", sector); break; case '-': sector--; printf("\r\nSector = %ld", sector); break; case '*': sector+=512; printf("\r\nSector = %ld", sector); break; case '/': sector-=512; printf("\r\nSector = %ld", sector); break; case '\r': default: break; } // print new prompt printf("\r\ncmd>"); } } }}// Routine to print a hex table to the outputvoid debugPrintHexTable(unsigned int length, unsigned char *buffer){ unsigned int i, j; for (i = 0; i < 0x20; i++) { printf("\r\n0x%2X0... ",i); for (j = 0; j < 0x10; j++) { printf ("%02X ",*buffer++); } } }// Card IO handler// The switch on the SD card needs to be de-bouncedvoid __irq_entry GPIO_Handler (void){ // Check card status and update LED's if (MMC_LOCK_STATUS) LED1_Clr = 1; // Card is not locked else LED1_Set = 1; // Card is locked, turn off if (MMC_IN_STATUS) { // Card is not in socket LED0_Clr = 1; // Card is not in socket } else { LED0_Set = 1; // Card is in socket mmcCardInFlag = 1; }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -