int MMC_LB_Init() { // dprintf("MMC Init\r\n"); _MMC_LB_InitCache(); MMC_Initialize(MMC_4BIT_MODE); return -1; }
static void MMCGpioTask(void *arg) { u8 err; cardstate = CARD_OUT; cardexsit = 1 ; while(1) { // __intc_mask_irq(48 + MMC_CD_PIN); printf("Looks like MMC gpio change! \n"); if ( cardstate == CARD_OUT ) //card have inserted! { OSTimeDlyHMSM(0,0,0,500); if ( __gpio_get_pin(MMC_CD_PIN) == 0 ) //card readlly insert! { printf("Card readlly insert! \n"); cardstate = CARD_IN; info_card_in(); MMC_Initialize(); __gpio_as_irq_rise_edge(MMC_CD_PIN); } else __gpio_as_irq_fall_edge(MMC_CD_PIN); } else //card have not inserted! { OSTimeDlyHMSM(0,0,0,500); if ( __gpio_get_pin(MMC_CD_PIN) == 1 ) //card readlly out! { printf("Card readlly out! \n"); cardstate = CARD_OUT; info_card_out(); __gpio_as_irq_fall_edge(MMC_CD_PIN); } else __gpio_as_irq_rise_edge(MMC_CD_PIN); } __gpio_ack_irq(MMC_CD_PIN); __intc_ack_irq(48 + MMC_CD_PIN); __gpio_unmask_irq(MMC_CD_PIN); OSSemPend(MMCGPIOEvent, 0, &err); } }
//#include "mmc_protocol.h" //struct mmc_csd csd; void MMCTest() { unsigned short mmcbuf[2048]; int i; unsigned int t[2]; unsigned int t1[2]; unsigned int size; JZ_StartTimer(); JZ_GetTimer(t); MMC_Initialize(); size=MMC_GetSize(); printf("Card Size: %d\n",size); for(i = 0; i < 2048;i++) mmcbuf[i] = i; printf("write mmc 4 8 sector\r\n"); MMC_WriteMultiBlock(4,8,(unsigned char *)mmcbuf); printf("write mmc 12 8 sector\r\n"); MMC_WriteMultiBlock(12,8,(unsigned char *)mmcbuf); for(i = 0; i < 2048;i++) mmcbuf[i] = 0; printf("read mmc 4 8 sector\r\n"); MMC_ReadMultiBlock(4,8,(unsigned char *)mmcbuf); for(i = 0; i < 2048;i++) if(mmcbuf[i] != i) printf("error %d, %d\r\n", mmcbuf[i],i); printf("read mmc 12 8 sector\r\n"); for(i = 0; i < 2048;i++) mmcbuf[i] = 0; MMC_ReadMultiBlock(12,8,(unsigned char *)mmcbuf); for(i = 0; i < 2048;i++) if(mmcbuf[i] != i) printf("error %d, %d\r\n", mmcbuf[i],i); printf("Test mmc OK!\n"); JZ_GetTimer(t1); JZ_DiffTimer(t1,t1,t); printf("write file use timer %d.%06d s\r\n",t1[1],t1[0]); JZ_StopTimer(); }
void mmc_detect_init() { MMCGPIOEvent = OSSemCreate(0); __gpio_mask_irq(MMC_CD_PIN); __gpio_as_input(MMC_CD_PIN); __gpio_disable_pull(MMC_CD_PIN); request_irq(48 + MMC_CD_PIN, mmc_gpio_irq_handler, 0); __gpio_unmask_irq(MMC_CD_PIN); cardexsit = 0; mmcsrc.GetRequest = GetRequest; mmcsrc.Response = Response; mmcsrc.Name = "MMC"; printf("Register Midware SRC MMC! \n"); RegisterMidSrc(&mmcsrc); mmcid = mmcsrc.ID; printf("mmc ID %d \n",mmcsrc.ID); MMC_Initialize(); OSTaskCreate(MMCGpioTask, (void *)0, (void *)&MGTaskStack[MMC_GPIO_TASK_STK_SIZE - 1], MMC_GPIO_TASK_PRIO); }