0x00,0x00,0x20,0x90,0x00,0x00,0x02,0x12,0x00,0x21,0x20,0x00,0x00,0x02,0x10,0x80,<br />0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x01,0x00,0x02,0x22,0x00,0x00,0x44,0x40,0x00,<br />0x08,0x21,0x05,0xF6,0x61,0x00,0x1F,0x1F,0x06,0x1F,0x1F,0x1F,0x1F,0x08,0x00,0x00,<br />0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x22,0x90,<br />0x00,0x00,0x02,0x22,0x00,0x21,0x10,0x10,0x00,0x04,0x11,0x00,0x00,0x00,0x00,0x00,<br />0x80,0x00,0x10,0x02,0x00,0x01,0x11,0x00,0x04,0x48,0x80,0x00,0x08,0x19,0x06,0x38,<br />};<br />/// List of button pins that must be configured for use by the application.<br />static const Pin pPins[] = {PINS_DBGU};<br />static const Pin pinPB1 = PIN_PUSHBUTTON_1;<br />static const Pin pinPB2 = PIN_PUSHBUTTON_2;<br /><br />static const Pin pLCDDataPins[]={ LCDD0,LCDD1,LCDD2,LCDD3,LCDD4,LCDD5,LCDD6,LCDD7};<br />static const Pin pinLCDCS=LCDCS;<br />static const Pin pinLCDWR = LCDWR;<br />static const Pin pinLCDA0=LCDA0;<br /><br /><br />/// Indicates the current state (on or off) for each LED.<br />static unsigned char pLedStates[2] = {1, 1};<br /><br />/// Global timestamp in milliseconds since start of application.<br />volatile unsigned int timestamp = 0;<br /><br />//------------------------------------------------------------------------------<br />// Local functions<br />//------------------------------------------------------------------------------<br /><br />//------------------------------------------------------------------------------<br />/// Handler for PIT interrupt. Increments the timestamp counter.<br />//------------------------------------------------------------------------------<br />static void ISR_Pit(void)<br />{<br /> unsigned int status;<br /><br /> // Read the PIT status register<br /> status = PIT_GetStatus() & AT91C_PITC_PITS;<br /> if (status != 0) {<br /><br /> // Read the PIVR to acknowledge interrupt and get number of ticks<br /> timestamp += (PIT_GetPIVR() >> 20);<br /> }<br />}<br /><br />//------------------------------------------------------------------------------<br />/// Configure the periodic interval timer to generate an interrupt every<br />/// millisecond.<br />//------------------------------------------------------------------------------<br />static void ConfigurePit(void)<br />{<br /> // Initialize the PIT to the desired frequency<br /> PIT_Init(PIT_PERIOD, BOARD_MCK / 1000000);<br /><br /> // Configure interrupt on PIT<br /> AIC_DisableIT(AT91C_ID_SYS);<br /> AIC_ConfigureIT(AT91C_ID_SYS, AT91C_AIC_PRIOR_LOWEST, ISR_Pit);<br /> AIC_EnableIT(AT91C_ID_SYS);<br /> PIT_EnableIT();<br /><br /> // Enable the pit<br /> PIT_Enable();<br />}<br /><br />//------------------------------------------------------------------------------<br />/// Interrupt handler for pushbutton #1. Starts or stops LED#1.<br />//------------------------------------------------------------------------------<br />static void ISR_Bp1(void)<br />{<br /> static unsigned int lastPress = 0;<br /><br /> // Check if the button has been pressed<br /> if (!PIO_Get(&pinPB1)) {<br /><br /> // Simple debounce method: limit push frequency to 1/DEBOUNCE_TIME<br /> // (i.e. at least DEBOUNCE_TIME ms between each push)<br /> if ((timestamp - lastPress) > DEBOUNCE_TIME) {<br /><br /> lastPress = timestamp;<br /><br /> // Toggle LED state<br /> pLedStates[0] = !pLedStates[0];<br /> if (!pLedStates[0]) {<br /><br /> LED_Clear(0);<br /> }<br /> }<br /> }<br />}<br /><br />//------------------------------------------------------------------------------<br />/// Interrupt handler for pushbutton #2. Starts or stops LED#2 and TC0.<br />//------------------------------------------------------------------------------<br />static void ISR_Bp2(void)<br />{<br /> static unsigned int lastPress = 0;<br /><br /> // Check if the button has been pressed<br /> if (!PIO_Get(&pinPB2)) {<br /><br /> // Simple debounce method: limit push frequency to 1/DEBOUNCE_TIME<br /> // (i.e. at least DEBOUNCE_TIME ms between each push)<br /> if ((timestamp - lastPress) > DEBOUNCE_TIME) {<br /><br /> lastPress = timestamp;<br /><br /> // Disable LED#2 and TC0 if there were enabled<br /> if (pLedStates[1]) {<br /><br /> pLedStates[1] = 0;<br /> LED_Clear(1);<br /> AT91C_BASE_TC0->TC_CCR = AT91C_TC_CLKDIS;<br /> }<br /> // Enable LED#2 and TC0 if there were disabled<br /> else {<br /><br /> pLedStates[1] = 1;<br /> LED_Set(1);<br /> AT91C_BASE_TC0->TC_CCR = AT91C_TC_CLKEN | AT91C_TC_SWTRG;<br /> }<br /> }<br /> }<br />}<br /><br />//------------------------------------------------------------------------------<br />/// Configure the pushbuttons to generate interrupts.<br />//------------------------------------------------------------------------------<br />static void ConfigureButtons(void)<br />{<br />#if defined(at91sam7lek) || defined(at91cap9dk)<br /> const Pin pinCol0 = PIN_KEYBOARD_COL0;<br /> PIO_Configure(&pinCol0, 1);<br />#endif<br /><br /> // Configure pios<br /> PIO_Configure(&pinPB1, 1);<br /> PIO_Configure(&pinPB2, 1);<br /><br /> // Initialize interrupts<br /> PIO_InitializeInterrupts(AT91C_AIC_PRIOR_LOWEST);<br /> PIO_ConfigureIt(&pinPB1, (void (*)(const Pin *)) ISR_Bp1);<br /> PIO_ConfigureIt(&pinPB2, (void (*)(const Pin *)) ISR_Bp2);<br /> PIO_EnableIt(&pinPB1);<br /> PIO_EnableIt(&pinPB2);<br />}<br /><br />//------------------------------------------------------------------------------<br />/// Configure LEDs #1 and #2 (cleared by default).<br />//------------------------------------------------------------------------------<br />static void ConfigureLeds(void)<br />{<br /> LED_Configure(0);<br /> LED_Configure(1);<br />}<br /><br />//------------------------------------------------------------------------------<br />/// Interrupt handler for TC0 interrupt. Toggles the state of LED #2<br />//------------------------------------------------------------------------------<br />static void ISR_Tc0(void)<br />{<br /> // Clear status bit to acknowledge interrupt<br /> AT91C_BASE_TC0->TC_SR;<br /><br /> // Toggle LED state<br /> LED_Toggle(1);<br /> printf("2 ");<br />}<br /><br />//------------------------------------------------------------------------------<br />/// Configure Timer Counter 0 to generate an interrupt every 250ms.<br />//------------------------------------------------------------------------------<br />static void ConfigureTc(void)<br />{<br /> unsigned int div;<br /> unsigned int tcclks;<br /><br /> // Enable peripheral clock<br /> AT91C_BASE_PMC->PMC_PCER = 1 << AT91C_ID_TC0;<br /><br /> // Configure TC for a 4Hz frequency and trigger on RC compare<br /> TC_FindMckDivisor(4, BOARD_MCK, &div, &tcclks);<br /> TC_Configure(AT91C_BASE_TC0, tcclks | AT91C_TC_CPCTRG);<br /> AT91C_BASE_TC0->TC_RC = (BOARD_MCK / div) / 4; // timerFreq / desiredFreq<br /><br /> // Configure and enable interrupt on RC compare<br /> AIC_ConfigureIT(AT91C_ID_TC0, AT91C_AIC_PRIOR_LOWEST, ISR_Tc0);<br /> AT91C_BASE_TC0->TC_IER = AT91C_TC_CPCS;<br /> AIC_EnableIT(AT91C_ID_TC0);<br /><br /> // Start the counter if LED is enabled.<br /> if (pLedStates[1]) {<br /><br /> TC_Start(AT91C_BASE_TC0);<br /> }<br />}<br /><br />//------------------------------------------------------------------------------<br />/// Waits for the given number of milliseconds (using the timestamp generated<br />/// by the PIT).<br />/// param delay Delay to wait for, in milliseconds.<br />//------------------------------------------------------------------------------<br />static void Wait(unsigned long delay)<br />{<br /> volatile unsigned int start = timestamp;<br /> unsigned int elapsed;<br /> do {<br /> elapsed = timestamp;<br /> elapsed -= start;<br /> }<br /> while (elapsed < delay);<br />}<br /><br />//------------------------------------------------------------------------------<br />// Exported functions<br />//------------------------------------------------------------------------------<br /><br />/// Write Data to LCD Controller<br />/// Sequence: LCDWR low --> LCDCS low --> Write Data<br />// -->LCDWR hign -->LCDCS high<br />// if CMD is 1,then as a Command<br />void WritetoLCD(unsigned char ucData,unsigned char CMD)<br />{<br /> unsigned int i,j;<br /><br /> PIO_Clear(&pinLCDCS);<br /> PIO_Clear(&pinLCDWR);<br /> <br /> //for(j=0;j<10;j++); //delay<br /> if (CMD == 0) //is date<br /> PIO_Clear(&pinLCDA0);<br /> else //cmd==1 is address set command<br /> PIO_Set(&pinLCDA0);<br /> <br /><br /> //for(j=0;j<10;j++); //delay<br /> for ( i = 0 ; i < 8; i++)<br /> {<br /> if (((ucData>>i) & 0x1)==1)<br /> PIO_Set(&pLCDDataPins);<br /> else<br /> PIO_Clear( &pLCDDataPins);<br /> }<br /> //for(j=0;j<10;j++); //delay<br /><br /> //for(j=0;j<2;j++); //delay <br /> PIO_Set(&pinLCDWR);<br /> //for(j=0;j<1;j++); //delay<br /> PIO_Set(&pinLCDCS);<br /> //for(j=0;j<1;j++); //delay<br /> <br />}<br /><br /><br /><br />//------------------------------------------------------------------------------<br />/// Main function<br />//------------------------------------------------------------------------------<br />int main()<br />{<br /> int i,j,k;<br /> <br /> PIO_Configure(pPins, PIO_LISTSIZE(pPins));<br /> PIO_Configure(pLCDDataPins, PIO_LISTSIZE(pLCDDataPins));<br /> PIO_Configure(&pinLCDCS, 1);<br /> PIO_Configure(&pinLCDWR, 1);<br /> PIO_Configure(&pinLCDA0, 1);<br /><br /> <br /> <br /> DBGU_Configure(DBGU_STANDARD, 115200, BOARD_MCK);<br /> printf("-- Getting Started Project 1.4 --
");<br /> printf("Board : %s, Chip ID : 0x%08X
", BOARD_NAME, AT91C_BASE_DBGU->DBGU_CIDR);<br /><br /> // Configuration<br /> ConfigurePit();<br /> ConfigureTc();<br /> //ConfigureButtons();<br /> //ConfigureLeds();<br /><br /><br /> //for(k=0;k<10000;k++;)<br /> for (j=0;j<5;j++) Wait(500);<br /> while (1)<br /> { <br /> for(k=0;k<5;k++)<br /> { <br /> WritetoLCD(0,1);//reset display ram pointer to 0<br /> WritetoLCD(0,1);//reset display ram pointer to 0<br /> WritetoLCD(0,1);//reset display ram pointer to 0 <br /> for(i=0;i<272;i++)<br /> for (j=0;j<480;j++)<br /> {WritetoLCD( (((i*j*k)%65535)&0xff),0); WritetoLCD(((((i*j*k)%65535)>>8)&0xff),0); } <br /> for (j=0;j<15;j++) Wait(500); <br /> WritetoLCD(0,1);//reset display ram pointer to 0<br /> WritetoLCD(0,1);//reset display ram pointer to 0<br /> WritetoLCD(0,1);//reset display ram pointer to 0 <br /> for(i=0;i<272;i++)<br /> for (j=0;j<480;j++)<br /> {if (i<272/3) {WritetoLCD(0xfc,0),WritetoLCD(i&0xff,0);}<br /> else if (i<272/3*2) {WritetoLCD(0x03,0),WritetoLCD(j&0xff,0);} <br /> else if (i<272/3*3) {WritetoLCD(j&0xff,0),WritetoLCD(j&0xff,0) ;}<br /> } <br /> <br /> } <br /> WritetoLCD(0,1);//reset display ram pointer to 0<br /> WritetoLCD(0,1);//reset display ram pointer to 0<br /> WritetoLCD(0,1);//reset display ram pointer to 0 <br /> for(i=0;i<272;i++)<br /> for (j=0;j<480/8;j++)<br /> {for(k=0;k<8;k++) if (((pic[480/8*i+j]>>(7-k)) & 0x1)==1) {WritetoLCD(0xff,0);WritetoLCD(0xff,0);} <br /> else {WritetoLCD(0x00,0);WritetoLCD(0x00,0);}}<br /> for (j=0;j<15;j++) Wait(500); <br />/* WritetoLCD(0,1);//reset display ram pointer to 0<br /> WritetoLCD(0,1);//reset display ram pointer to 0<br /> WritetoLCD(0,1);//reset display ram pointer to 0 <br /> for(i=0;i<272;i++)<br /> for (j=0;j<480;j++)<br /> // {WritetoLCD((char)j,0); } <br /> {if (j==240) WritetoLCD(0xff,0);else WritetoLCD(0x00,0);}<br /> for (j=0;j<15;j++) Wait(500); <br />*/ WritetoLCD(0,1);//reset display ram pointer to 0<br /> WritetoLCD(0,1);//reset display ram pointer to 0<br /> WritetoLCD(0,1);//reset display ram pointer to 0 <br /> for(i=0;i<272;i++)<br /> for (j=0;j<480;j++)<br /> {<br /> if (j==0 || i==0 || j==240 ||j==210 ||j==211 || i==j || i==j+5 )<br /> { WritetoLCD(0xf0|j,0);WritetoLCD(0x0f|j,0);}<br /> else <br /> { WritetoLCD(0x00,0);WritetoLCD(0x00,0);}<br /> }<br /> for (j=0;j<5;j++) Wait(500); <br />/* WritetoLCD(0,1);//reset display ram pointer to 0<br /> WritetoLCD(0,1);//reset display ram pointer to 0<br /> WritetoLCD(0,1);//reset display ram pointer to 0 <br /> for(i=0;i<272;i++)<br /> for (j=0;j<480;j++)<br /> {<br /> if(i==j) <br /> WritetoLCD(0xff,0);<br /> else<br /> WritetoLCD(0x00,0);<br /> }<br />*/ WritetoLCD(0,1);//reset display ram pointer to 0<br /> WritetoLCD(0,1);//reset display ram pointer to 0<br /> WritetoLCD(0,1);//reset display ram pointer to 0<br /> //for (j=0;j<5;j++) Wait(500); <br /> //for(i=0;i<272;i++)<br /> // for (j=0;j<480;j++)<br /> // {WritetoLCD(0x00,0); }<br /> //for (j=0;j<5;j++) Wait(500); <br /> WritetoLCD(0,1);//reset display ram pointer to 0<br /> WritetoLCD(0,1);//reset display ram pointer to 0<br /> WritetoLCD(0,1);//reset display ram pointer to 0 <br /> //for(i=0;i<272;i++)<br /> for (j=0;j<480;j++)<br /> {<br /> WritetoLCD(j,0);WritetoLCD(j,0);<br /> }<br /> for (j=0;j<5;j++) Wait(500); <br /> // }<br /> // ...................................................................<br /> <br /> WritetoLCD(0,1);//reset display ram pointer to 0<br /> WritetoLCD(0,1);//reset display ram pointer to 0<br /> WritetoLCD(0,1);//reset display ram pointer to 0<br /> <br /> for(i=0;i<272;i++)<br /> for (j=0;j<480;j++)<br /> {<br /> //if (((i>20) && (i<240) && (j>20) && (j<460) && (j%10==0))|| (i%10==0))<br /> if((i%40==0)||(j%40==0))<br /> <br /> {WritetoLCD(0xff,0); WritetoLCD(i&0xff,0); } //write date<br /> else<br /> {WritetoLCD(0x00,0);WritetoLCD(0x00,0); } <br /> /* if ((i==130) && (j==470))<br /> if (i&0x1==1)<br /> {WritetoLCD(0x00,0); } //write date<br /> else<br /> {WritetoLCD(0xff,0);} */ <br /> // Wait(500); <br /> } <br /> for (j=0;j<15;j++) Wait(500); <br /> WritetoLCD(0,1);//reset display ram pointer to 0<br /> WritetoLCD(0,1);//reset display ram pointer to 0<br /> WritetoLCD(0,1);//reset display ram pointer to 0<br /> for(i=0;i<272;i++)<br /> for (j=0;j<480;j++)<br /> {<br /> //if ((i>20) && (i<240) && (j>20) && (j<460))<br /> if((i%10==0)||(j%10==2))<br /> {WritetoLCD(0x00,0);WritetoLCD(0x00,0); } //write date<br /> else<br /> {WritetoLCD(i,0);WritetoLCD(i,0);} <br /> /* if ((i==130) && (j==470))<br /> if (i&0x1==1)<br /> {WritetoLCD(0x00,0); } //write date<br /> else<br /> {WritetoLCD(0xff,0);} */ <br /> // Wait(500); <br /> } <br /> for (j=0;j<15;j++) Wait(500); <br /> for(k=1;k<240;k=2*k+1)<br /> {<br /> WritetoLCD(0,1);//reset display ram pointer to 0<br /> WritetoLCD(0,1);//reset display ram pointer to 0<br /> WritetoLCD(0,1);//reset display ram pointer to 0 <br /> for(i=0;i<272;i++)<br /> for (j=0;j<480;j++)<br /> {<br /> // {if (((j==0)||(j==479))) WritetoLCD(0xff,0);else WritetoLCD(0x00,0);}<br /> //if ((i>k) && (i<272-k) && (j>k) && (j<480-k) )<br /> if(((i%k)==0)||((j%k)==0)) <br /> { if (k%1) {WritetoLCD(0xff,0);WritetoLCD(i&0xff,0);} else {WritetoLCD(0x00,0);WritetoLCD(0x00,0);} } //write date<br /> else<br /> {if (!(k%1)) {WritetoLCD(0xff,0);WritetoLCD(j&0xff,0);} else {WritetoLCD(0x00,0);WritetoLCD(0x00,0);}} <br /> } <br /> // for (j=0;j<15;j++) Wait(500); Wait(500); <br /> WritetoLCD(0,1);//reset display ram pointer to 0<br /> WritetoLCD(0,1);//reset display ram pointer to 0<br /> WritetoLCD(0,1);//reset display ram pointer to 0 <br /> for(i=0,j=0;i<15;i++)<br /> {<br /> for (j=0;j<k*8;j++)<br /> {<br /> if (j%8<4)<br /> {WritetoLCD(0x00,0);WritetoLCD(0x00,0);}<br /> else <br /> {WritetoLCD(0x0f,0);WritetoLCD(0xf0,0);} <br /> } <br /> for(;j<480;j++) <br /> {WritetoLCD(0xff,0);WritetoLCD(0x1,0);} <br /> }<br /> <br /> for(i=0;i<5;i++)<br /> for (j=0;j<480;j++)<br /> {WritetoLCD(0x00,0);WritetoLCD(0x00,0);}<br /> for(i=0;i<5;i++)<br /> for (j=0;j<480;j++)<br /> {WritetoLCD(i&0xff,0);WritetoLCD(j&0xff,0);}<br /> <br /> for(i=0,j=0;i<15;i++)<br /> {<br /> for (j=0;j<k*8;j++)<br /> {<br /> if (j%8<4)<br /> {WritetoLCD(j&0xff,0);WritetoLCD(i&0xff,0);}<br /> else <br /> {WritetoLCD(0x00,0);WritetoLCD(0x00,0); }<br /> } <br /> for(;j<480;j++) <br /> {WritetoLCD(0x00,0);WritetoLCD(0x00,0);} <br /> }<br /> <br /><br /> for (j=0;j<15;j++) Wait(500); <br /> } <br /> } //...........................................................................<br /> <br /> <br /> for (j=0;j<5;j++) Wait(500);<br /> <br /> WritetoLCD(0,1);//reset display ram pointer to 0<br /> WritetoLCD(0x00,0); //write date<br /> WritetoLCD(0xff,0);WritetoLCD(0xff,0); //write date <br /> for (j=0;j<5;j++) Wait(500); <br /> WritetoLCD(0,1);//reset display ram pointer to 0 <br /><br /> /* for (j=0;j<5;j++) Wait(500);<br /> for ( i = 0 ; i < 9600;i++ )<br /> {<br /> WritetoLCD(0xFE,0); <br /> } <br /> for (j=0;j<5;j++) Wait(500);<br /> <br /> for (j=0;j<5;j++) Wait(500);<br /> for ( i = 0 ; i < 9600;i++ )<br /> {<br /> WritetoLCD(0x7F,0); <br /> } <br /> for (j=0;j<5;j++) Wait(500);<br /> for ( i = 0 ; i < 9600;i++ )<br /> {<br /> WritetoLCD(0xFF,0); <br /> } */<br /> for (j=0;j<5;j++) Wait(500); <br /> <br /> for ( i = 0 ; i < 9600;i++ )<br /> {<br /> WritetoLCD((char)(0xff),0); WritetoLCD((char)(0xff),0); <br /> } <br /> for (j=0;j<5;j++) Wait(500); <br /> for ( i = 0 ; i < 9600;i++ )<br /> {<br /> WritetoLCD((char)(i&0xff),0); WritetoLCD((char)(i&0xff),0); <br /> } <br /> <br /> for (j=0;j<5;j++) Wait(500); <br /> for ( i = 9600*2 ; i < 480*270*2;i++ )<br /> {<br /> WritetoLCD((char)(0),0); WritetoLCD((char)(0),0); <br /> }<br /> <br /> <br /> WritetoLCD(0,0); //write date<br /> WritetoLCD(0,0); //write date <br /> for (j=0;j<5;j++) Wait(500); <br /> <br /> for(;;);<br /> <br /> <br /> <br /> <br /> {<br /> for ( i = 0 ; i < 9600;i++ )<br /> {<br /> WritetoLCD((char)(k&0xff),0); //write date<br /> <br /> }<br /> for (j=0;j<10;j++) Wait(500);<br /> } <br /> WritetoLCD(0,0); //write date<br /> WritetoLCD(0,0); //write date<br /> Wait(500);<br /> WritetoLCD(0x81,0); //write date<br /> WritetoLCD(0x81,0); //write date<br /> Wait(500); <br /><br />}<br />
|