I am attempting to port example code from the fatsdraw_Tiva123GH6PM project to the hello_Tiva1233H6PM project to attempt to verify the hardware on our custom board works. So far I have been able to modify the board files so that when the when <board>_initSDSPI() function is called it properly configures the port correctly, code snippit below:
/* Enable the peripherals used by the SD Card */ MAP_SysCtlPeripheralEnable(SYSCTL_PERIPH_SSI1); /* Configure pad settings */ GPIOPadConfigSet(GPIO_PORTD_BASE, GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3, GPIO_STRENGTH_4MA, GPIO_PIN_TYPE_STD); MAP_GPIOPinConfigure(GPIO_PD0_SSI1CLK); MAP_GPIOPinConfigure(GPIO_PD2_SSI1RX); MAP_GPIOPinConfigure(GPIO_PD3_SSI1TX); SDSPI_init();
The code then continues on to start up the bios.
However when the one (and only) task is started the code hard faults on the SDSPI_open() function call, code below:
/* * ======== taskFxn ======== * Task to perform a file copy * * Task tries to open an existing file inputfile[]. If the file doesn't * exist, create one and write some known content into it. * The contents of the inputfile[] are then copied to an output file * outputfile[]. Once completed, the contents of the output file are * printed onto the system console (stdout). * * Task for this function is created statically. See the project's .cfg file. */ Void taskFxn(UArg arg0, UArg arg1) { FRESULT fresult; SDSPI_Handle sdspiHandle; SDSPI_Params sdspiParams; /* Variables to keep track of the file copy progress */ unsigned int bytesRead = 0; unsigned int bytesWritten = 0; unsigned int filesize; unsigned int totalBytesCopied = 0; /* Mount and register the SD Card */ SDSPI_Params_init(&sdspiParams); sdspiHandle = SDSPI_open(Board_SDSPI, DRIVE_NUM, &sdspiParams); if (sdspiHandle == NULL) { System_abort("Error starting the SD card\n"); } else { System_printf("Drive %u is mounted\n", DRIVE_NUM); } // printDrive(STR(DRIVE_NUM), &(dst.fs)); /* Try to open the source file */ fresult = f_open(&src, inputfile, FA_READ); if (fresult != FR_OK) { System_printf("Creating a new file \"%s\"...", inputfile); /* Open file for both reading and writing */ fresult = f_open(&src, inputfile, FA_CREATE_NEW|FA_READ|FA_WRITE); if (fresult != FR_OK) { System_printf("Error: \"%s\" could not be created\n", inputfile); System_abort("Aborting...\n"); } f_write(&src, textarray, strlen(textarray), &bytesWritten); f_sync(&src); /* Reset the internal file pointer */ f_lseek(&src, 0); System_printf("done\n"); } else { System_printf("Using existing copy of \"%s\"\n", inputfile); } /* Create a new file object for the file copy */ fresult = f_open(&dst, outputfile, FA_CREATE_ALWAYS|FA_WRITE); if (fresult != FR_OK) { System_printf("Error opening \"%s\"\n", outputfile); System_abort("Aborting...\n"); } else { System_printf("Starting file copy\n"); } /* Copy the contents from the src to the dst */ while (true) { /* Read from source file */ fresult = f_read(&src, cpy_buff, CPY_BUFF_SIZE, &bytesRead); if (fresult || bytesRead == 0) { break; /* Error or EOF */ } /* Write to dst file */ fresult = f_write(&dst, cpy_buff, bytesRead, &bytesWritten); if (fresult || bytesWritten < bytesRead) { System_printf("Disk Full\n"); break; /* Error or Disk Full */ } /* Update the total number of bytes copied */ totalBytesCopied += bytesWritten; } f_sync(&dst); /* Get the filesize of the source file */ filesize = f_size(&src); /* Close both inputfile[] and outputfile[] */ f_close(&src); f_close(&dst); System_printf("File \"%s\" (%u B) copied to \"%s\" (Wrote %u B)\n", inputfile, filesize, outputfile, totalBytesCopied); /* Now output the outputfile[] contents onto the console */ fresult = f_open(&dst, outputfile, FA_READ); if (fresult != FR_OK) { System_printf("Error opening \"%s\"\n", outputfile); System_abort("Aborting...\n"); } /* Print file contents */ while (true) { /* Read from output file */ fresult = f_read(&dst, cpy_buff, CPY_BUFF_SIZE, &bytesRead); if (fresult || bytesRead == 0) { break; /* Error or EOF */ } cpy_buff[bytesRead] = '\0'; /* Write output */ System_printf("%s", cpy_buff); System_flush(); } /* Close the file */ f_close(&dst); // printDrive(STR(DRIVE_NUM), &(dst.fs)); /* Stopping the SDCard */ SDSPI_close(sdspiHandle); System_printf("Drive %u unmounted\n", DRIVE_NUM); BIOS_exit(0); }
This example task was taken directly from the fatsdraw_Tiva123GH6PM example with only minor edits. Any suggestions on how to fix this problem would be greatly appreciated. Thank you.
-Matt