Individální projekty MPOA

Mikroprocesory s architekturou ARM

Uživatelské nástroje

Nástroje pro tento web


2014:pixel-light

Rozdíly

Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.

Odkaz na výstup diff

Obě strany předchozí revize Předchozí verze
2014:pixel-light [2015/01/18 14:23]
Pavel Kostelník
2014:pixel-light [2015/01/19 01:44] (aktuální)
Pavel Kostelník
Řádek 65: Řádek 65:
 __task void init (void) ​ __task void init (void) ​
 { {
- // create tasks: +   // create tasks: 
- t_blink = os_tsk_create(blink,​ 0); +      t_blink = os_tsk_create(blink,​ 0); 
- t_uart_tx = os_tsk_create(uart_tx,​ 0);  +      t_uart_tx = os_tsk_create(uart_tx,​ 0);  
- t_interpreter = os_tsk_create(interpreter,​ 0); +      t_interpreter = os_tsk_create(interpreter,​ 0); 
- t_spi247 = os_tsk_create(spi247,​ 0); +      t_spi247 = os_tsk_create(spi247,​ 0); 
- t_spi787 = os_tsk_create(spi787,​ 0); +      t_spi787 = os_tsk_create(spi787,​ 0); 
- t_dc247 = os_tsk_create(dc247,​ 0); +      t_dc247 = os_tsk_create(dc247,​ 0);
  
- // init semaphores:​ +   // init semaphores:​ 
- os_sem_init (&​Semspi247,​ 0); +      os_sem_init (&​Semspi247,​ 0); 
- os_sem_init (&​Semspi787,​ 0); +      os_sem_init (&​Semspi787,​ 0); 
- os_sem_init (&​Semdc247,​ 0);+      os_sem_init (&​Semdc247,​ 0);
   
- // init mutexes +   // init mutexes 
- os_mut_init(&​Mutspi247);​ +      os_mut_init(&​Mutspi247);​ 
- os_mut_init(&​Mutspi787);​ +      os_mut_init(&​Mutspi787);​ 
- os_mut_init(&​Mutuart_tx);​+      os_mut_init(&​Mutuart_tx);​
   
- //delete itself: +   // delete itself: 
- os_tsk_delete_self ();+      os_tsk_delete_self ();
 } }
 //​------------------------- TASK: init -- (End) ---------------------------------- //​------------------------- TASK: init -- (End) ----------------------------------
 </​code>​ </​code>​
 +
  
 === TASK: blink === === TASK: blink ===
Řádek 94: Řádek 95:
 //​-------------------------- TASK: blink -- (Begin) --------------------------------- //​-------------------------- TASK: blink -- (Begin) ---------------------------------
 // Blinking with LED D5  // Blinking with LED D5
- __task void blink (void)+__task void blink (void)
 { {
- while(1) +   while(1) 
- +   ​
- LED_off(5);​ //​ turn off LED5 +      LED_off(5);​ //​ turn off LED5 
- os_dly_wait (500); ​             // wait for 500 ms +      os_dly_wait (500); ​             // wait for 500 ms 
- LED_on(5);​ //​ turn on LED5 +      LED_on(5);​ //​ turn on LED5 
- os_dly_wait (500); ​             // wait for 500 ms +      os_dly_wait (500); ​             // wait for 500 ms 
- }+   ​}
 } }
 //​-------------------------- TASK: blink -- (End) ---------------------------------- //​-------------------------- TASK: blink -- (End) ----------------------------------
 </​code>​ </​code>​
 +
  
 === TASK: interpreter,​ spi787, spi247, dc247 === === TASK: interpreter,​ spi787, spi247, dc247 ===
Řádek 118: Řádek 120:
 __task void wb (void) __task void wb (void)
 { {
- uint8_t target = newtarget;​ //​ target device +   uint8_t target = newtarget;​ //​ target device 
- float wb_dt = 0; // time difference+   ​float wb_dt = 0; // time difference
   
- while(1) +   while(1) 
- +   ​
- wb_dt = (float)(wb_stop[target] - wb_start[target])/​12.0;​ +      wb_dt = (float)(wb_stop[target] - wb_start[target])/​12.0;​
   
- if (wb_counter[target] >= wb_per[target]) //​ counter overflow +      ​if (wb_counter[target] >= wb_per[target]) //​ counter overflow 
- wb_counter[target] = 0; +         ​wb_counter[target] = 0; 
- else +      else 
- wb_counter[target]++;​ // increment counter+         ​wb_counter[target]++;​ // increment counter
   
   
- if (wb_counter[target] < wb_start[target]) //​ all LEDs OFF +      ​if (wb_counter[target] < wb_start[target]) //​ all LEDs OFF 
- +      
- for (i=0; i<12; i++) +         ​for (i=0; i<12; i++) 
- +         ​
- DCs[i] = 1023; +            DCs[i] = 1023; 
- +         ​
- j=0; +         ​j=0; 
- +      
- else if (wb_counter[target] < wb_stop[target]) //​all LEDs dimmed +      else if (wb_counter[target] < wb_stop[target]) //​all LEDs dimmed 
- {  +      {  
- for (i=0; i<12; i++) +         ​for (i=0; i<12; i++) 
- +         ​
- if (wb_counter[target] < (wb_start[target] + i*wb_dt)) +            if (wb_counter[target] < (wb_start[target] + i*wb_dt)) 
- DCs[i] = 1023; +               ​DCs[i] = 1023; 
- else if (wb_counter[target] < (wb_start[target] + (i+1)*wb_dt)) +            else if (wb_counter[target] < (wb_start[target] + (i+1)*wb_dt)) 
- DCs[i] = (wb_start[target] + (i+1)*wb_dt - wb_counter[target])/​wb_dt*1023;​ +               ​DCs[i] = (wb_start[target] + (i+1)*wb_dt - wb_counter[target])/​wb_dt*1023;​ 
- else  +            else  
- DCs[i] = 0; +               ​DCs[i] = 0; 
- }  +         ​}  
- +      
- else // all LEDs ON +      else // all LEDs ON 
- +      
- for (i=0; i<12; i++) +         ​for (i=0; i<12; i++) 
- +         ​
- DCs[i] = 0; +            DCs[i] = 0; 
- +         ​
- }+      }
   
- dimming(DCs,​ LEDcount, ON, OFF, TR, lastLevel[target]);​ //​ ON, OFF, TR values computation using Dimming algorithm+      ​dimming(DCs,​ LEDcount, ON, OFF, TR, lastLevel[target]);​ //​ ON, OFF, TR values computation using Dimming algorithm
   
- os_mut_wait(&​Mutspi247,​ 0xFFFF);​ //​ wait for mutex+      ​os_mut_wait(&​Mutspi247,​ 0xFFFF);​ //​ wait for mutex
   
- SPI_SendFrame(target + 3, 1, 0xCF, 0, 0, 0); // send SPI frame to pixel light+      ​SPI_SendFrame(target + 3, 1, 0xCF, 0, 0, 0); // send SPI frame to pixel light
   
- while ((LPC_SSP2->​SR & 0x4)== 0x0){} // wait until frame is received  +      ​while ((LPC_SSP2->​SR & 0x4)== 0x0){} // wait until frame is received  
- SPI_RcvData = (LPC_SSP2->​DR)<<​16;​ // shift received data +      SPI_RcvData = (LPC_SSP2->​DR)<<​16;​ // shift received data 
- while ((LPC_SSP2->​SR & 0x4)== 0x0){} // wait until frame is received  +      while ((LPC_SSP2->​SR & 0x4)== 0x0){} // wait until frame is received  
- SPI_RcvData += LPC_SSP2->​DR;​ // sum received data +      SPI_RcvData += LPC_SSP2->​DR;​ // sum received data
   
- SPI_SendFrame(target + 3, 1, 0xCC, ((SPI_RcvData)&​(0xFB)),​ (SPI_RcvData>>​8)&​0xFF,​ (SPI_RcvData>>​16)&​0xFF);​  +      ​SPI_SendFrame(target + 3, 1, 0xCC, ((SPI_RcvData)&​(0xFB)),​ (SPI_RcvData>>​8)&​0xFF,​ (SPI_RcvData>>​16)&​0xFF);​  
- while ((LPC_SSP2->​SR & 0x4)== 0x0){} // wait until frame is received +      while ((LPC_SSP2->​SR & 0x4)== 0x0){} // wait until frame is received 
- SPI_RcvData = (LPC_SSP2->​DR)<<​16;​ // shift received data +      SPI_RcvData = (LPC_SSP2->​DR)<<​16;​ // shift received data 
- while ((LPC_SSP2->​SR & 0x4)== 0x0){} // wait until frame is received +      while ((LPC_SSP2->​SR & 0x4)== 0x0){} // wait until frame is received 
- SPI_RcvData += LPC_SSP2->​DR;​ // sum received data +      SPI_RcvData += LPC_SSP2->​DR;​ // sum received data
   
- for(i=0; i<12; i++) // send ON, OFF and TR values to pixel light +      ​for(i=0; i<12; i++) // send ON, OFF and TR values to pixel light 
- +      
- SPI_SendFrame(target + 3, 1, i + 0xC0, ((OFF[i]<<​4)+TR[i])&​0xFF,​ ((ON[i]<<​6)+(OFF[i]>>​4))&​0xFF,​ (ON[i]>>​2)&​0xFF); ​  +         ​SPI_SendFrame(target + 3, 1, i + 0xC0, ((OFF[i]<<​4)+TR[i])&​0xFF,​ ((ON[i]<<​6)+(OFF[i]>>​4))&​0xFF,​ (ON[i]>>​2)&​0xFF); ​  
- while ((LPC_SSP2->​SR & 0x4)== 0x0){} // wait until frame is received +         ​while ((LPC_SSP2->​SR & 0x4)== 0x0){} // wait until frame is received 
- SPI_RcvData = (LPC_SSP2->​DR)<<​16;​ // shift received data +         ​SPI_RcvData = (LPC_SSP2->​DR)<<​16;​ // shift received data 
- while ((LPC_SSP2->​SR & 0x4)== 0x0){} // wait until frame is received +         ​while ((LPC_SSP2->​SR & 0x4)== 0x0){} // wait until frame is received 
- SPI_RcvData += LPC_SSP2->​DR;​ // sum received data  +         ​SPI_RcvData += LPC_SSP2->​DR;​ // sum received data  
- }+      }
   
- SPI_SendFrame(target + 3, 1, 0xCC, ((SPI_RcvData)&​0xFF)|(1<<​2),​ (SPI_RcvData>>​8)&​0xFF,​ (SPI_RcvData>>​16)&​0xFF);​ //​set MAPENA bit +      ​SPI_SendFrame(target + 3, 1, 0xCC, ((SPI_RcvData)&​0xFF)|(1<<​2),​ (SPI_RcvData>>​8)&​0xFF,​ (SPI_RcvData>>​16)&​0xFF);​ //​set MAPENA bit 
- while ((LPC_SSP2->​SR & 0x4)== 0x0){} // wait until frame is received +      while ((LPC_SSP2->​SR & 0x4)== 0x0){} // wait until frame is received 
- SPI_RcvData = (LPC_SSP2->​DR)<<​16;​ // shift received data +      SPI_RcvData = (LPC_SSP2->​DR)<<​16;​ // shift received data 
- while ((LPC_SSP2->​SR & 0x4)== 0x0){} // wait until frame is received +      while ((LPC_SSP2->​SR & 0x4)== 0x0){} // wait until frame is received 
- SPI_RcvData += LPC_SSP2->​DR;​ // sum received data +      SPI_RcvData += LPC_SSP2->​DR;​ // sum received data
   
- os_mut_release(&​Mutspi247);​ // release mutex+      ​os_mut_release(&​Mutspi247);​ // release mutex
   
- os_dly_wait(20);​+      ​os_dly_wait(20);​
   
- } // end while(1)+   } // end while(1)
 } }
 //​--------------------------- TASK: wb -- (End) ----------------------------------- //​--------------------------- TASK: wb -- (End) -----------------------------------
 </​code>​ </​code>​
 +
  
  
2014/pixel-light.1421587406.txt.gz · Poslední úprava: 2015/01/18 14:23 autor: Pavel Kostelník