Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //interrupt routine
- void __attribute__((__interrupt__, no_auto_psv)) _T1Interrupt(void)
- {
- flag = 1;
- }
- bit flag;
- //main loop
- while(1)
- {
- // Prepare data every iteration, if needed
- if(i2s_addData(chls, false))
- {
- n++;
- chls[0] = 16400*sin(1256*n/48000);
- }
- // Write data to port if interrupt has been called
- // Downside: writeout may not happen immediatly
- // Upside: writout is in main loop, so guaranteed to be in sync with dataPrepare
- if (flag == 1) {
- flag = 0;
- loadShift(); //load the shift registers and inhibi
- // Perform data writout to port.
- while(SCLK);;
- SHIFT_INH = 0;
- IFS0bits.T1IF = 0; //Clear Timer1 interrupt flag
- PORTBbits.RB9 ^= 1;
- //selecteer de volgende dataset de laatste byte is verstuurt
- inTrans.index++;
- if(inTrans.index == BYTESPERFSYNC)
- {
- inTrans = queued;
- }
- dataToPort(); //prepare next data set
- }
- /* if(AMP_checkError())
- {
- pcbLeds_write(0x05);
- }*/
- }
- //fuctie die de data voorbereid voor de interrupt functie
- bool i2s_addData(signed int chl[], bool overWrite)
- {
- if(inTrans.order != queued.order) return false;;
- chl[0] = (chl[0] ^ 0xffff) +1;
- chl[1] = (chl[1] ^ 0xffff) +1;
- chl[2] = (chl[2] ^ 0xffff) +1;
- chl[3] = (chl[3] ^ 0xffff) +1;
- queued.data1[0].val = chl[0];
- queued.data1[1].val = chl[0]>>8;
- queued.data1[2].val = chl[1];
- queued.data1[3].val = chl[1]>>8;
- queued.data2[0].val = chl[2];
- queued.data2[1].val = chl[2]>>8;
- queued.data2[2].val = chl[3];
- queued.data2[3].val = chl[3]>>8;
- queued.index = 0;
- queued.order = inTrans.order + 1;
- return true;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement