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