1 / 18

SDRAM Load and Play

SDRAM Load and Play. By Hernacki, Kevin ECE3551 Final Project 25 April 2008. Overview. Purpose Solution and Operation Problems Code Initialize.c ISR.c Main.c Talkthrough.h Results References. Purpose.

edison
Download Presentation

SDRAM Load and Play

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. SDRAM Load and Play By Hernacki, Kevin ECE3551 Final Project 25 April 2008

  2. Overview • Purpose • Solution and Operation • Problems • Code • Initialize.c • ISR.c • Main.c • Talkthrough.h • Results • References

  3. Purpose • To use the knowledge learned in ECE-3551, to make a final project. The project is to 1: use the SDRAM as a storage device for a song, and then 2: to play it back, 3: to play it back at a faster speed, and 4: to play it back at a slower speed.

  4. Solution and Operation • Press PF8 once: Load data into SDRAM and LED4 on. • Second press stops load, LED4 off, and pointer back to beginning. • Press PF9 once: Play data from SDRAM and LED5 on. • Second press stops play back, LED5 off, and pointer back to beginning. • Press PF10 once: Play data faster and LED6 on. • Second press stops play back, LED6 off, and pointer back to beginning. • Press PF11 once: Play data slower and LED7 on. • Second press stops play back, LED7 off, and pointer back to beginning.

  5. Problems • The set-up, size, and the rate speed of the SDRAM. • Loading and unloading the SDRAM. • The Pointer for the SDRAM. • Controlling the pointer for the SDRAM to get fast and slow play.

  6. Code; Initialize.c • Initializing the flags for the push buttons PF8 – PF11. void Init_Flags(void) { *pFIO_INEN = 0x0f00; //workaround for anomaly 05000311.(PF8 - PF11 enabled) *pFIO_DIR = 0x0000; *pFIO_EDGE = 0x0f00; *pFIO_MASKA_D = 0x0f00; } • Initializing the SDRAM and Registers on the board. //SDRAM Setup void Init_SDRAM(void) { if (*pEBIU_SDSTAT & SDRS) { //SDRAM Refresh Rate Control Register *pEBIU_SDRRC = 0x00000406; //SDRAM Memory Bank Control Register *pEBIU_SDBCTL = 0x00000025; //SDRAM Memory Global Control Register *pEBIU_SDGCTL = 0x0091998d; Buffl = pSDRAM_open; ssync(); } } //end Init_SDRAM

  7. SDRAM (Toolbar drop down)

  8. ISR.c Loading the SDRAM EX_INTERRUPT_HANDLER(Sport0_RX_ISR) { unsigned char led1; //Variable for LED4. unsigned char led2; //Variable for LED5. unsigned char led3; //Variable for LED6. unsigned char led4; //Variable for LED7. // confirm interrupt handling *pDMA1_IRQ_STATUS = 0x0001; if(openload==1) //If PF8=1 the data (song) is to be loaded into the SDRAM and LED4 on. { iChannel0LeftIn = iRxBuffer1[INTERNAL_ADC_L0]; //Data from DAC left to left channel-in. iChannel0RightIn = iRxBuffer1[INTERNAL_ADC_R0]; //Data from DAC right to right channel-in. iChannel0LeftOut = iChannel0LeftIn; //Data from left channel-in to left channel-out. iChannel0RightOut = iChannel0RightIn; //Data from right channel-in to right channel-out. iTxBuffer1[INTERNAL_DAC_L0] = iChannel0LeftOut; //Data from channel-out to DAC. iTxBuffer1[INTERNAL_DAC_R0] = iChannel0RightOut; //Data from channel-out to DAC. *Buffl++ = (short)(iChannel0LeftIn>>8); //Load data self-increment into SDRAM. // from channel-in right shift 8. led1 = 0x01; //Turn LED4 on. if(Buffl>pSDRAM_end) //If Buffl at pSDRAM_end stop value, stop loading and turn off LED4. { Buffl=pSDRAM_open; //Pointer Buffl to first space in storage SDRAM. led1=0x00; //LED4 off. openload=0; //Stop data load of SDRAM. } *pFlashA_PortB_Data = led1; //LED4 in used. } if(openload==2) //If PF8=2 the SDRAM load will stop, // LED4 off, and openload to 0. { *pFlashA_PortB_Data=0x00; //LED4 off. openload=0; //Openload reset to 0. }

  9. IRS.c Play back from SDRAM. if(playload==1) //If PF9=1 the data (song) is to be played back from SDRAM and LED5 on. { led2=0x02; //LED5 on. ChannelLeftOut = *Buffl++; //Play data self-increment from SDRAM into channel-out. iChannel0LeftOut = ((int) ChannelLeftOut)<<8; //Channel-out to channel-out interger shift left 8. iTxBuffer1[INTERNAL_DAC_L0] = iChannel0LeftOut; //Channel-out to DAC left. iTxBuffer1[INTERNAL_DAC_R0] = iChannel0LeftOut; //Channel-out to DAC right. if(Buffl>pSDRAM_end) //If Buffl at pSDRAM_end stop value, // stop playing and turn off LED5. { Buffl=pSDRAM_open; //Pointer Buffl to first space in storage SDRAM. led2=0x00; //LED5 off. playload=0; //Stop data playing of SDRAM. } *pFlashA_PortB_Data = led2; //LED5 in used. } if(playload==2) //If PF9=2 the SDRAM play back will stop, // LED5 off, and playload reset to 0. { *pFlashA_PortB_Data=0x00; //LED5 off. playload=0; //Playback reset to 0. }

  10. ISR.c Play back faster from SDRAM. if(fast==1) //If PF10=1 the data (song) is to be played back faster from SDRAM and LED6 on. { led3=0x04; //LED6 on. x =Buffl++; //Pointer address self-increment from SDRAM into x. ptrf=x*2; //Play only even addresses from SDRAM = to ptr. ChannelLeftOut = *ptrf++; //Play data self-increment from SDRAM into channel-out. iChannel0LeftOut = ((int) ChannelLeftOut)<<8; //Channel-out to channel-out interger shift left 8. iTxBuffer1[INTERNAL_DAC_L0] = iChannel0LeftOut; //Channel-out to DAC left. iTxBuffer1[INTERNAL_DAC_R0] = iChannel0LeftOut; //Channel-out to DAC right. if(Buffl>pSDRAM_end) //If Buffl at pSDRAM_end stop value, stop playing and turn off LED6. { Buffl=pSDRAM_open; //Pointer Buffl to first space in storage SDRAM. led3=0x00; //LED6 off. fast=0; //Stop data playing of SDRAM. } *pFlashA_PortB_Data = led3; //LED6 in used. } if(fast==2) //If PF10=2 the faster play back will stop, LED6 off, and fast reset to 0. { *pFlashA_PortB_Data=0x00; //LED6 off. fast=0; //Fast reset to 0. }

  11. ISR.c Play back slower from SDRAM. if(slow==1) //If PF11=1 the data (song) is to be played back slower from SDRAM and LED7 on. { led4=0x08; //LED7 on. ptrs = Buffl+1000000; //Play 1000000 samples. if (a>1) //If a >1, is the counter variable for a one cycle count. { Buffl++; //On the second cycle the pointer get incremented. a=0; //The a is reset to 0. } ptrs = Buffl; //Buffl address value = ptrs. a++; //The a is incremented by one. ChannelLeftOut = *ptrs; //The data at the address is fed into channel-out. iChannel0LeftOut = ((int) ChannelLeftOut)<<8; //Channel-out to channel-out interger shift left 8. iTxBuffer1[INTERNAL_DAC_L0] = iChannel0LeftOut; //Channel-out to DAC left. iTxBuffer1[INTERNAL_DAC_R0] = iChannel0LeftOut; //Channel-out to DAC right. if(Buffl>pSDRAM_end) //If Buffl at pSDRAM_end stop value, stop playing and turn off LED6. { Buffl=pSDRAM_open; //Pointer Buffl to first space in storage SDRAM. led4=0x00; //LED6 off. fast=0; //Stop data playing of SDRAM. } *pFlashA_PortB_Data = led4; //LED7 in used. } if(slow==2) //If PF11=2 the slow play back will stop, // LED7 off, and slow reset to 0. { *pFlashA_PortB_Data=0x00; //LED7 off. slow=0; //Slow reset to 0. }

  12. ISR.c FlagA EX_INTERRUPT_HANDLER(FlagA_ISR) { if(*pFIO_FLAG_C == 0x0100) //PF8 switch. { *pFIO_FLAG_C = 0x0100; //Confirm interrupt handling workaround for anomaly 05000311. openload++; //Openload variable, self-increment, load into SDRAM. if(openload==3) //If openload=2, stop loading data. openload=0; //PF8 toggled off from loading data (song) into SDRAM, LED4 off. Buffl=pSDRAM_open; //Buffl pointer set back to first space in SDRAM. } if (*pFIO_FLAG_C == 0x0200) //PF9 switch.. { *pFIO_FLAG_C = 0x0200; playload++; //Playload variable, self-increment, play data from SDRAM. if(playload==3) //If playload=2, stop playing data from SDRAM. playload =0; //PF9 toggled off from playing data (song) from SDRAM, LED5 off. Buffl=pSDRAM_open; //Buffl pointer set back to first space in SDRAM. }

  13. ISR.c FlagA Continued if (*pFIO_FLAG_C == 0x0400) //PF10 switch. { *pFIO_FLAG_C = 0x0400; fast++; //fast variable, self-increment, play data from SDRAM. if(fast==3) //If fast=2, stop playing data from SDRAM. fast=0; //PF10 toggled off from playing data (song) from SDRAM, LED6 off. Buffl=pSDRAM_open; //Buffl pointer set back to first space in SDRAM. } if (*pFIO_FLAG_C == 0x0800) //PF11 switch. { *pFIO_FLAG_C = 0x0800; slow++; //Slow variable, self-increment, play data from SDRAM. if(slow==3) //If slow=2, stop playing data from SDRAM. slow=0; //PF11 toggled off from playing data (song) from SDRAM, LED7 off. Buffl=pSDRAM_open; //Buffl pointer set back to first space in SDRAM. }

  14. Main.c //The *Buffl is a variable interger for the Buffl pointer. int *Buffl; // The ptr is a variable for pointer for fast. int *ptrf; // The ptr is a variable for pointer for slow. int *ptrs; //The openload is a variable for the PF8 to load the data (song) into SDRAM. int openload=0; //The playload is a variable interger for the PF9 to play the data (song) from SDRAM. int playload=0; //The fast is a variable interger for the PF10 to play the data (song) faster from SDRAM. int fast=0; //The slow is a variable interger for the PF11 to play the data (song) slower from SDRAM. int slow=0; //The x is a variable interger for the fast and slow equations. int x=0; //The a is a variable interger for the slow play back "for loop". int a=0; short ChannelLeftOut; short ChannelRightOut;

  15. Talkthrough.h • Symbolic constants #define pSDRAM_open (unsigned int *)0x00000000 //SDRAM begining address for pointer. #define pSDRAM_end (unsigned int *)0x01FFFFFF //SDRAM end address for pointer. // two minutes and fifty-five seconds of storage. • Global variables void Init_SDRAM(void); extern short ChannelLeftOut; extern short ChannelRightOut extern int i; extern int *Buffl; extern int *ptrf; extern int *ptrs; extern int openload; extern int playload; extern int fast; extern int slow; extern int x; extern int a; extern short ChannelLeftOut; extern short ChannelRightOut; • Prototypes void Init_SDRAM(void);

  16. Results • Pressing PF8 loads the data (song) into the SDRAM, LED4 comes on; it stops at the end of the SDRAM space/or second press, LED4 goes off, and the point goes back to beginning. • Pressing PF9 plays the data (song) back from the SDRAM exactly as it was played in, LED5 comes on; it stops at the end of the SDRAM space/or second press, LED5 goes off, and pointer goes back to beginning. • Pressing PF10 plays the data (song) back from the SDRAM at a faster speed, LED6 comes on; press the button a second time to stop, LED6 goes off, and pointer goes back to beginning. • Pressing PF11 plays the data (song) back from the SDRAM at slower speed, LED7 comes on; press the button a second time to stop, LED7 goes off, and pointer goes back to beginning.

  17. Questions?

  18. References • Dr. Keputska’s web page • http://my.fit.edu/~vkeputska/ece3551/ • Dr. Kepuska’s class slides

More Related