Last active
July 21, 2019 20:42
-
-
Save pranav083/6d97c770a490b7b0effc8aca01efc5de to your computer and use it in GitHub Desktop.
testing is due
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
.origin 0 | |
.entrypoint start | |
#define GPIO0 0x44E07000 | |
#define GPIO1 0x4804C000 | |
#define GPIO2 0x481AC000 | |
#define GPIO3 0x481AE000 | |
#define GPIO_OE 0x134 | |
#define GPIO_DATAIN 0x138 | |
#define GPIO_CLEARDATAOUT 0x190 | |
#define GPIO_SETDATAOUT 0x194 | |
#define INS_PER_MS 500 * 100 | |
#define ON_DURATION 250 * INS_PER_MS | |
#define OFF_DURATION 250 * INS_PER_MS | |
#define CPRUCFG c4 | |
//STORE THE NO. OF TIME INPUT BUTTON TO STORE | |
#define NUMBER_OF_BITS 8 | |
#define DS0 6 /* P8_3 38 GPIO 1_6 mode 7 */ | |
#define INPUT 7 /* P8_4 39 GPIO 1_7 mode 7 */ | |
#define S0 2 /* P8_5 34 GPIO 1_2 mode 7 */ | |
#define S1 3 /* P8_6 35 GPIO 1_3 mode 7 */ | |
#define OE1 13 /* P8_11 45 GPIO 1_13 mode 7 */ | |
#define OE2 12 /* P8_12 44 GPIO 1_12 mode 7 */ | |
#define CP 15 /* P8_15 47 GPIO 1_15 mode 7 */ | |
#define DS7 14 /* P8_16 46 GPIO 1_14 mode 7 */ | |
#define CK_LED 31 /* P8_20 63 GPIO 1_31 mode 7 */ | |
/////////////////////////////////////////////////////////// | |
start: | |
// Enable the OCP master port, | |
lbco r0, CPRUCFG, 4, 4 // read SYSCFG | |
clr r0.t4 // clear SYSCFG[STANDBY_INIT] | |
sbco r0, CPRUCFG, 4, 4 // enable OCP master port | |
// move the no of bits to be store in the memory | |
MOV r0, NUMBER_OF_BITS | |
// STORE THE BIT DATA IN THE REGISTER | |
MOV r6.b0, 0b11110000 // MOVE 0 INITIAL VALUE TO R6 | |
MOV r6.b1, 0b00000000 // MOVE 0 INITIAL VALUE TO R6 | |
MOV r6.b2, 0b00000000 // MOVE 0 INITIAL VALUE TO R6 | |
MOV r6.b3, 0b00000000 // MOVE 0 INITIAL VALUE TO R6 | |
//set DS0 pin to ouput | |
MOV r3, GPIO1 | GPIO_OE | |
LBBO r2, r3, 0, 4 | |
CLR r2, r2, 6 //DS0 | |
SBBO r2, r3, 0, 4 | |
//set S0 pin to ouput | |
MOV r3, GPIO1 | GPIO_OE | |
LBBO r2, r3, 0, 4 | |
CLR r2, r2, 13 //S0 | |
SBBO r2, r3, 0, 4 | |
//set S1 pin to ouput | |
MOV r3, GPIO1 | GPIO_OE | |
LBBO r2, r3, 0, 4 | |
CLR r2, r2, 12 //S1 | |
SBBO r2, r3, 0, 4 | |
//set OE1 and OE2 pin to ouput | |
MOV r3, GPIO1 | GPIO_OE | |
LBBO r2, r3, 0, 4 | |
CLR r2, r2, 2 //OE1 | |
SBBO r2, r3, 0, 4 | |
//set CP pin to ouput | |
MOV r3, GPIO1 | GPIO_OE | |
LBBO r2, r3, 0, 4 | |
CLR r2, r2, 14 //CP | |
SBBO r2, r3, 0, 4 | |
//set DS7 pin to ouput | |
MOV r3, GPIO1 | GPIO_OE | |
LBBO r2, r3, 0, 4 | |
CLR r2, r2, 15 //DS7 | |
SBBO r2, r3, 0, 4 | |
//set CHECK LED pin to ouput here | |
MOV r3, GPIO1 | GPIO_OE | |
LBBO r2, r3, 0, 4 | |
CLR r2, r2, 31 //CHECK LED | |
SBBO r2, r3, 0, 4 | |
//setting the register for data high and GPIO1 | |
MOV r4, GPIO1 | GPIO_CLEARDATAOUT | |
MOV r5, GPIO1 | GPIO_SETDATAOUT | |
////////////////////////////////////////////////////////////////// | |
// LOAD THE INPUT SHIFT REGISTER | |
//initiliazion of pins | |
//Setting the value the out pin S0 | |
MOV r2, 1 << 13 //move out pin to | |
SBBO r2, r5, 0, 4 // the p8_11 pin is HIGH | |
//Setting the value the out pin S1 | |
MOV r2, 1 << 12 //move out pin to | |
SBBO r2, r4, 0, 4 // the p8_12 pin is LOW | |
//Setting the value the out pin OE1 and OE2 | |
MOV r2, 1 << 2 //move out pin to | |
SBBO r2, r5, 0, 4 // the p8_11 pin is HIGH | |
//Setting the value the out pin CP | |
MOV r2, 1 << 14 //move out pin to | |
SBBO r2, r4, 0, 4 // the p8_16 pin is LOW | |
CALL DELAY | |
/////////////////////////////////////////////////////////////////// | |
//NOW THE DATA OUT MODE TO THE LED CONNECTED FIRST REGISTER | |
// THE MODE OF 74HC299 FROM LOAD TO SHIFT RIGHT MODE | |
L_OUT2: | |
// NOW THE DATA STORE IN THE REGISTER IS MADE TO THE DATA PIN OF THE SHIFT REGISTER R6 | |
//Setting the value the out pin DS0 | |
MOV r2, 1 << 6 //move out pin to | |
SBBO r2, r4, 0, 4 // the p8_3 pin is LOW | |
//CHECK FOR THE SET BIT AND CLEAR BIT ON THE PIN | |
QBBS DATA_SET, r6.t7 // if the bit is high, jump to BIT_HIGH | |
QBBC DATA_CLR, r6.t7 // if the bit is low, jump to BIT_LOW | |
DATA_SET: | |
//Setting the value the out pin DS0 | |
MOV r2, 1 << 6 //move out pin to | |
SBBO r2, r5, 0, 4 // the p8_3 pin is HIGH | |
CALL CP_PUL //CALL CLK PULSE | |
//shift the bit store in the r6 to the RIGHT | |
LSL r6, r6, 1 | |
// decrement the value of bits to be store and check its value | |
SUB r0, r0, 1 | |
QBEQ OUT_E, r0, 0 | |
QBNE L_OUT2, r0, 0 | |
DATA_CLR: | |
//Setting the value the out pin DS0 | |
MOV r2, 1 << 6 //move out pin to | |
SBBO r2, r4, 0, 4 // the p8_3 pin is LOW | |
CALL CP_PUL // CALL CLK PULSE | |
//shift the bit store in the r6 to the RIGHT | |
LSL r6, r6, 1 | |
// decrement the value of bits to be store and check its value | |
SUB r0, r0, 1 | |
QBEQ OUT_E, r0, 0 | |
QBNE L_OUT2, r0, 0 | |
//--------------------------------------------------------------------------- | |
// CHANGING THE STATE OF THE ENABLE PIN | |
//--------------------------------------------------------------------------- | |
// CHANGING THE STATE OF THE ENABLE PIN | |
OUT_E: | |
//Setting the value the out pin OE1 and OE2 | |
MOV r2, 1 << 2 //move out pin to | |
SBBO r2, r4, 0, 4 // the p8_11 pin is LOW | |
//Setting the value the out pin CP | |
MOV r2, 1 << 14 //move out pin to | |
SBBO r2, r5, 0, 4 // the p8_16 pin is HIGH | |
CALL DELAY // CALL THE DELAY FUNCTION | |
//Setting the value the out pin CP | |
MOV r2, 1 << 14 //move out pin to | |
SBBO r2, r4, 0, 4 // the p8_16 pin is LOW | |
//------------------------------------------------------------------------ | |
HALT | |
// call function here | |
// CALL FOR A DELAY | |
DELAY: | |
MOV r1, OFF_DURATION // set up for the delay | |
LRR: | |
SUB r1,r1, 1 // subtract 1 from R1 | |
QBNE LRR, r1, 0 | |
RET | |
CP_PUL: | |
//Setting the value the out pin CP | |
MOV r2, 1 << 14 //move out pin to | |
SBBO r2, r5, 0, 4 // the p8_16 pin is HIGH | |
CALL DELAY // CALL THE DELAY FUNCTION | |
//Setting the value the out pin CP | |
MOV r2, 1 << 14 //move out pin to | |
SBBO r2, r4, 0, 4 // the p8_16 pin is LOW | |
CALL DELAY // CALL THE DELAY FUNCTION | |
RET |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
.origin 0 | |
.entrypoint start | |
#define GPIO0 0x44E07000 | |
#define GPIO1 0x4804C000 | |
#define GPIO2 0x481AC000 | |
#define GPIO3 0x481AE000 | |
#define GPIO_OE 0x134 | |
#define GPIO_DATAIN 0x138 | |
#define GPIO_CLEARDATAOUT 0x190 | |
#define GPIO_SETDATAOUT 0x194 | |
#define INS_PER_MS 500 * 100 | |
#define ON_DURATION 250 * INS_PER_MS | |
#define OFF_DURATION 250 * INS_PER_MS | |
#define CPRUCFG c4 | |
//STORE THE NO. OF TIME INPUT BUTTON TO STORE | |
#define NUMBER_OF_BITS 8 | |
#define DS0 6 /* P8_3 38 GPIO 1_6 mode 7 */ | |
#define INPUT 7 /* P8_4 39 GPIO 1_7 mode 7 */ | |
#define OE 2 /* P8_5 34 GPIO 1_2 mode 7 */ //OE1 AND OE2 | |
#define S0 13 /* P8_11 45 GPIO 1_13 mode 7 */ | |
#define S1 12 /* P8_12 44 GPIO 1_12 mode 7 */ | |
#define MR 15 /* P8_15 47 GPIO 1_15 mode 7 */ | |
#define CP 14 /* P8_16 46 GPIO 1_14 mode 7 */ | |
#define CK_LED 31 /* P8_20 63 GPIO 1_31 mode 7 */ | |
//--------------------------------------------------------------------------------------- | |
//*************************************************************************************** | |
start: | |
// Enable the OCP master port, | |
lbco r0, CPRUCFG, 4, 4 // read SYSCFG | |
clr r0.t4 // clear SYSCFG[STANDBY_INIT] | |
sbco r0, CPRUCFG, 4, 4 // enable OCP master port | |
// move the no of bits to be store in the memory | |
MOV r0, NUMBER_OF_BITS | |
// STORE THE BIT DATA IN THE REGISTER | |
//TAKING THE REGISTER BIT AS(FROM LSB TO MSB) | |
// TWO BITS BIT 0 ANS BIT 1 WILL BE COMMON IN BOTH CONTROL REGISTER MODE AND DATA REGISTER MODE | |
// FOR CONTROL REGISTER BITS FOR MASTER (SENDING CTRL BITS FROM TX TO RX) | |
// DESCRIPTION BIT NO. STATE | |
// CTRL/DATA MODE 0 1 (COMMON) | |
// ACK 1 0 (COMMON) | |
// STROBE 2 1 | |
// RE/WR 3 0 | |
// RES. 4 - | |
// RES. 5 - | |
// RES. 6 - | |
// RES. 7 - | |
// FOR CONTROL REGISTER BITS FOR SLAVE (SENDING CTRL BITS FROM RX TO TX) FOR SUCCESSFUL HANDSAKING | |
// DESCRIPTION BIT NO. STATE | |
// CTRL/DATA MODE 0 1 (COMMON) | |
// ACK 1 1 (COMMON) | |
// STROBE 2 0 | |
// RE/WR 3 1 | |
// RES. 4 - | |
// RES. 5 - | |
// RES. 6 - | |
// RES. 7 - | |
// FOR DATA REGISTER BITS FROM MASTER (SENDING DATA FROM TX TO RX) | |
// DESCRIPTION BIT NO. STATE | |
// CTRL/DATA MODE 0 0 (COMMON) | |
// ACK 1 0 (COMMON) | |
// DATA 2 - | |
// DATA 3 - | |
// DATA 4 - | |
// DATA 5 - | |
// DATA 6 - | |
// DATA 7 - | |
// FOR DATA REGISTER BITS FROM SLAVE (SENDING DATA FROM TX TO RX) | |
// DESCRIPTION BIT NO. STATE | |
// CTRL/DATA MODE 0 0 (COMMON) | |
// ACK 1 1 (COMMON) | |
// DATA 2 - | |
// DATA 3 - | |
// DATA 4 - | |
// DATA 5 - | |
// DATA 6 - | |
// DATA 7 - | |
//WAITING FOR ACK. (BIT 1) TO GET FROM THE RECEIVER SIDE FOR SUCCESSFUL TRANSMISSION AND MASTER IN PARALLEL LOAD MODE | |
MOV r6.b0, 0b00000101 // CONTROL BITS WHICH MAKES IT MASTER FOR COMMUNICATION | |
MOV r6.b1, 0b00001011 // CONTROL BITS WHICH MAKES IT SLAVE FOR COMMUNICATION | |
MOV r6.b2, 0b00000010 // SENDING THE DATA BIT TO FOR SUCCESFUL ACK OF DATA | |
MOV r6.b3, 0b00000000 // MOVE 0 INITIAL VALUE TO R6 | |
MOV R10.b0 , 0X5 //MOV 5 TO THE REGISTER ,IT IS THE NO. OF TIMES A LOOP FOR DATA STORAGE WILL RUN | |
MOV R11 , 0x0 //MOV O TO THE REGISTER | |
//set DS0 pin to ouput | |
MOV r3, GPIO1 | GPIO_OE | |
LBBO r2, r3, 0, 4 | |
CLR r2, r2, 6 //DS0 | |
SBBO r2, r3, 0, 4 | |
//set S0 pin to ouput | |
MOV r3, GPIO1 | GPIO_OE | |
LBBO r2, r3, 0, 4 | |
CLR r2, r2, 13 //S0 | |
SBBO r2, r3, 0, 4 | |
//set S1 pin to ouput | |
MOV r3, GPIO1 | GPIO_OE | |
LBBO r2, r3, 0, 4 | |
CLR r2, r2, 12 //S1 | |
SBBO r2, r3, 0, 4 | |
//set OE1 and OE2 pin to ouput | |
MOV r3, GPIO1 | GPIO_OE | |
LBBO r2, r3, 0, 4 | |
CLR r2, r2, 2 //OE1 and OE2 | |
SBBO r2, r3, 0, 4 | |
//set CP pin to ouput | |
MOV r3, GPIO1 | GPIO_OE | |
LBBO r2, r3, 0, 4 | |
CLR r2, r2, 14 //CP | |
SBBO r2, r3, 0, 4 | |
//set COMMON for Q0 and Q7 pin to ouput | |
MOV r3, GPIO1 | GPIO_OE | |
LBBO r2, r3, 0, 4 | |
SET r2, r2, 7 //INPUT | |
SBBO r2, r3, 0, 4 | |
//set CHECK LED pin to ouput here | |
MOV r3, GPIO1 | GPIO_OE | |
LBBO r2, r3, 0, 4 | |
CLR r2, r2, 31 //CHECK LED | |
SBBO r2, r3, 0, 4 | |
//set MASTER RESET pin to ouput here | |
MOV r3, GPIO1 | GPIO_OE | |
LBBO r2, r3, 0, 4 | |
CLR r2, r2, 15 //MASTER RESET | |
SBBO r2, r3, 0, 4 | |
//setting the register for data high and GPIO1 | |
MOV r4, GPIO1 | GPIO_CLEARDATAOUT | |
MOV r5, GPIO1 | GPIO_SETDATAOUT | |
//--------------------------------------------------------------------------------------- | |
//*************************************************************************************** | |
//RESETING THE SHIFT REGISTER FOR PARALLEL LOAD | |
RX_MRC: | |
//Setting the value the out pin MR | |
MOV r2, 1 << 15 //move out pin to | |
SBBO r2, r4, 0, 4 // the p8_15 pin is LOW | |
CALL DELAY // CALL THE DELAY FUNCTION | |
//Setting the value the out pin MR | |
MOV r2, 1 << 15 //move out pin to | |
SBBO r2, r5, 0, 4 // the p8_15 pin is HIGH | |
//--------------------------------------------------------------------------------------- | |
//*************************************************************************************** | |
//--------------------------------------------------------------------------------------- | |
//*************************************************************************************** | |
// SETTING THE REGISTER TO PARALLEL LOAD MODE | |
//INITIALIZATION OF CODE | |
RX_LOAD: | |
//Setting the value the out pin S0 | |
MOV r2, 1 << 13 //move out pin to | |
SBBO r2, r5, 0, 4 // the p8_11 pin is HIGH | |
//Setting the value the out pin S1 | |
MOV r2, 1 << 12 //move out pin to | |
SBBO r2, r5, 0, 4 // the p8_12 pin is HIGH | |
//Setting the value the out pin OE1 and OE2 | |
MOV r2, 1 << 2 //move out pin to | |
SBBO r2, r4, 0, 4 // the P8_5 pin is LOW | |
//Setting the value the out pin CP | |
MOV r2, 1 << 14 //move out pin to | |
SBBO r2, r4, 0, 4 // the p8_16 pin is LOW | |
//*************************************************************************************** | |
// CHECKING IN THE DATA GIVEN BY RECEIVER SHIFT REGISTER | |
// perform a LOOP for delay of 1 sec just for testing | |
CALL DELAY1 // CALL THE DELAY1 FUNCTION | |
// Rising edge of clock to load the data | |
CALL CP_PULSE // CALL FOR CLK PULSE | |
//--------------------------------------------------------------------------------------- | |
//*************************************************************************************** | |
//--------------------------------------------------------------------------------------- | |
//*************************************************************************************** | |
// SETTING THE REGISTER TO SHIFT RIGHT MODE TO LOAD THE CONTROL REGISTER DATA | |
RX_STORE: | |
//Setting the value the out pin S1 | |
MOV r2, 1 << 12 //move out pin to | |
SBBO r2, r4, 0, 4 // the p8_12 pin is LOW | |
//Setting the value the out pin OE1 and OE2 | |
MOV r2, 1 << 2 //move out pin to | |
SBBO r2, r5, 0, 4 // the P8_5 pin is HIGH | |
//Setting the value the out pin DS0 | |
MOV r2, 1 << 6 //move out pin to | |
SBBO r2, r4, 0, 4 // the p8_3 pin is LOW | |
//*************************************************************************************** | |
//DATA NOW GET OUT FROM THE Q7 PIN OF THE SHIFT REGISTER | |
// AS THE DATA IS BEING LOADED FROM THE SHIFT REGISTER TO PRU REGISTER IN SHIFT RIGHT MODE | |
// move the no of bits as 8 to be store for running the loop | |
MOV r0 , NUMBER_OF_BITS | |
MOV R9.b0 , 0X0 //MOV O TO THE REGISTER | |
BIT_D: | |
CALL CP_PULSE // CALL FOR CLK PULSE | |
//set IN pin to INPUT FOR Q7 PIN INPUT | |
MOV r3, GPIO1 | GPIO_DATAIN | |
LBBO r7, r3, 0, 4 // P8_04 | |
MOV R7, R7 >> 7 | |
OR R9, R7, R9 | |
MOV R9, R9 << 1 | |
SUB r0, r0, 1 | |
QBEQ RX_TEST, r0, 0 | |
QBNE BIT_D, r0, 0 | |
//--------------------------------------------------------------------------------------- | |
//THE DATA GET LOADED TO THE REGISTER R9 | |
//--------------------------------------------------------------------------------------- | |
//--------------------------------------------------------------------------------------- | |
//*************************************************************************************** | |
//TESTING FOR THE HIGH BIT 0 ctrl BIT AT BIT 1 IN REGISTER R9 | |
RX_TEST: | |
MOV R11.b1, R9.b0 // STORE THE SLAVE BIT FOR REFERNCE | |
QBBC RX_MR, r11.t8 // if the bit is low, jump to RX_MR (MASTER RESET AND AGAIN TEST IT) | |
//--------------------------------------------------------------------------------------- | |
//*************************************************************************************** | |
RX_ACK: | |
// LOAD THE DATA INTO THE SHIFT REGISTER IN SHIFT RIGHT MODE | |
//Setting the value the out pin S1 | |
MOV r2, 1 << 12 //move out pin to | |
SBBO r2, r4, 0, 4 // the p8_12 pin is LOW | |
//Setting the value the out pin OE1 and OE2 | |
MOV r2, 1 << 2 //move out pin to | |
SBBO r2, r5, 0, 4 // the P8_5 pin is HIGH | |
//Setting the value the out pin DS0 | |
MOV r2, 1 << 6 //move out pin to | |
SBBO r2, r4, 0, 4 // the p8_3 pin is LOW | |
//*************************************************************************************** | |
//NOW THE DATA is being written TO THE SHIFT REGISTER | |
// THE MODE OF 74HC299 FROM LOAD TO SHIFT RIGHT MODE | |
MOV r0, NUMBER_OF_BITS | |
L_OUT2: | |
// NOW THE DATA STORE IN THE REGISTER IS MADE TO THE DATA PIN OF THE SHIFT REGISTER R6 | |
CALL DELAY // CALL THE DELAY FUNCTION | |
CALL CP_PULSE // CALL FOR CLK PULSE | |
//Setting the value the out pin DS0 | |
MOV r2, 1 << 6 //move out pin to | |
SBBO r2, r4, 0, 4 // the p8_3 pin is LOW | |
//*************************************************************************************** | |
QBBS RX_CTRL, R9.t0 | |
QBBC RX_ACKB , R9.t0 | |
RX_CTRL: | |
QBBC RX_SLV , R9.t2 | |
QBBS RX_MAS , R9.t2 | |
RX_SLV: | |
//CHECK FOR THE CONTROL BIT WRITTING TO THE SLAVE SHIFT REGISTER | |
QBBS DATA_SET, r6.t15 // if the bit is high, jump to BIT_HIGH | |
QBBC DATA_CLR, r6.t15 // if the bit is low, jump to BIT_LOW | |
RX_MAS: | |
//CHECK FOR THE CONTROL BIT WRITTING TO THE MASTER SHIFT REGISTER | |
QBBS DATA_SET, r6.t7 // if the bit is high, jump to BIT_HIGH | |
QBBC DATA_CLR, r6.t7 // if the bit is low, jump to BIT_LOW | |
RX_ACKB: | |
//CHECK FOR THE CONTROL BIT WRITTING TO THE SLAVE SHIFT REGISTER | |
QBBS RX_ASET, r6.t23 // if the bit is high, jump to BIT_HIGH | |
QBBC RX_ACLR, r6.t23 // if the bit is low, jump to BIT_LOW | |
//*************************************************************************************** | |
DATA_SET: | |
//Setting the value the out pin DS0 | |
MOV r2, 1 << 6 //move out pin to | |
SBBO r2, r5, 0, 4 // the p8_3 pin is HIGH | |
//shift the bit store in the r6 to the RIGHT | |
LSL r6, r6, 1 | |
// decrement the value of bits to be store and check its value | |
SUB r0, r0, 1 | |
QBEQ OUT_E, r0, 0 | |
QBNE L_OUT2, r0, 0 | |
DATA_CLR: | |
//Setting the value the out pin DS0 | |
MOV r2, 1 << 6 //move out pin to | |
SBBO r2, r4, 0, 4 // the p8_3 pin is LOW | |
//shift the bit store in the r6 to the RIGHT | |
LSL r6, r6, 1 | |
// decrement the value of bits to be store and check its value | |
SUB r0, r0, 1 | |
QBEQ OUT_E, r0, 0 | |
QBNE L_OUT2, r0, 0 | |
//*************************************************************************************** | |
// CHANGING THE STATE OF THE ENABLE PIN | |
OUT_E: | |
//Setting the value the out pin DS0 | |
MOV r2, 1 << 6 //move out pin to | |
SBBO r2, r4, 0, 4 // the p8_3 pin is LOW | |
//Setting the value the out pin OE1 and OE2 | |
MOV r2, 1 << 2 //move out pin to | |
SBBO r2, r4, 0, 4 // the P8_5 pin is LOW | |
CALL DELAY // CALL THE DELAY FUNCTION | |
CALL CP_PULSE // CALL FOR CLK PULSE | |
QBEQ EXIT , R10.b0, 0 // THIS SHOWS THAT ALL THE DATA IS RECEIVED | |
QBBS RX_MRC, r11.t0 // if the bit is high, jump to BIT_HIGH | |
QBBC RX_MRD, r11.t0 // if the bit is low, jump to BIT_LOW | |
//*************************************************************************************** | |
//--------------------------------------------------------------------------------------- | |
//--------------------------------------------------------------------------------------- | |
//*************************************************************************************** | |
//RESETING THE SHIFT REGISTER FOR PARALLEL LOAD FOR STORING THE DATA BITS | |
RX_MRD: | |
//Setting the value the out pin MR | |
MOV r2, 1 << 15 //move out pin to | |
SBBO r2, r4, 0, 4 // the p8_15 pin is LOW | |
CALL DELAY // CALL THE DELAY FUNCTION | |
//Setting the value the out pin MR | |
MOV r2, 1 << 15 //move out pin to | |
SBBO r2, r5, 0, 4 // the p8_15 pin is HIGH | |
//--------------------------------------------------------------------------------------- | |
//*************************************************************************************** | |
// SETTING THE REGISTER TO PARALLEL LOAD MODE FOR STORING THE DATA BITS | |
// | |
RX_DATA: | |
//Setting the value the out pin S1 | |
MOV r2, 1 << 12 //move out pin to | |
SBBO r2, r5, 0, 4 // the p8_12 pin is HIGH | |
//Setting the value the out pin OE1 and OE2 | |
MOV r2, 1 << 2 //move out pin to | |
SBBO r2, r4, 0, 4 // the P8_5 pin is LOW | |
//*************************************************************************************** | |
// CHECKING IN THE DATA GIVEN BY RECEIVER SHIFT REGISTER | |
CALL DELAY1 // CALL THE DELAY1 FUNCTION | |
CALL CP_PULSE // CALL FOR CLK PULSE | |
//--------------------------------------------------------------------------------------- | |
//*************************************************************************************** | |
// SETTING THE REGISTER TO SHIFT RIGHT MODE TO LOAD THE DATA BITS | |
RX_DATAS: | |
//Setting the value the out pin S1 | |
MOV r2, 1 << 12 //move out pin to | |
SBBO r2, r4, 0, 4 // the p8_12 pin is LOW | |
//Setting the value the out pin OE1 and OE2 | |
MOV r2, 1 << 2 //move out pin to | |
SBBO r2, r5, 0, 4 // the P8_5 pin is HIGH | |
//Setting the value the out pin DS0 | |
MOV r2, 1 << 6 //move out pin to | |
SBBO r2, r4, 0, 4 // the p8_3 pin is LOW | |
//DATA NOW GET OUT FROM THE Q0 PIN OF THE SHIFT REGISTER | |
//*************************************************************************************** | |
// move the no of bits to be store in the memory OR THE NO. OF TIMES LOOP RUNS | |
MOV r0, NUMBER_OF_BITS | |
// AS THE DATA IS BEING LOADED FROM THE SHIFT REGISTER TO PRU REGISTER IN SHIFT LEFT MODE | |
DBIT_D: | |
CALL CP_PULSE // CALL FOR CLK PULSE | |
//set IN pin to INPUT FOR Q7 PIN INPUT | |
MOV r3, GPIO1 | GPIO_DATAIN | |
LBBO r7, r3, 0, 4 // P8_04 | |
MOV R7, R7 >> 7 | |
OR R9, R7, R9 | |
MOV R9, R9 << 1 | |
SUB r0, r0, 1 | |
QBEQ RX_DTEST, r0, 0 | |
QBNE DBIT_D, r0, 0 | |
RX_DTEST1: | |
MOV R11.b0 , R9.b0 | |
QBBC RX_MRD , r11.t1 // if the bit is low, jump to RX_MRD (MASTER RESET AND AGAIN TEST IT FOR DATA BITS) | |
MOV R10.b1 , 0X6 // THIS LOOP WILL RUN FOR 6 TIME TO STORE ALL SIX BIT OF DATA IN ONE REGISTER OF PRU | |
QBEQ RX_WR2 , R10.b0, 0 // THIS SHOWS THAT ALL THE DATA IS RECEIVED | |
//--------------------------------------------------------------------------------------- | |
//*************************************************************************************** | |
//--------------------------------------------------------------------------------------- | |
//*************************************************************************************** | |
//WRITING THE DATA IN THE THE STORAGE REGISTER | |
//ONLY THE 6 BIT OF DATA IS OF USE OTHER DATA BIT LIKE BIT 0 IS MODE BIT AND BIT 1 IS ACK BIT | |
//WHICH IS COMMON TO BOTH THE COMMAND AND DATA MODE | |
//WRITE THE DATA BITS IN THE REGISTER R12 | |
RX_WR1: | |
MOV R12.t0, r11.t2 | |
LSL R12, R12, 1 | |
LSL R11, R11, 1 | |
SUB R10.b1, R10.b1, 1 | |
QBNE RX_WR1, r0, 0 | |
SUB R10.b0, R10.b0, 1 //DECREASE THE VALUE BY ONE AS 6 BIT OF DATA WILL COME OUT FOR ONLY FIVE TIME LAST TIME 2 BIT OF | |
//DATA BIT WILL ARRIVE | |
// TELL THE TX THAT DATA IS BEIGN RECEIVED | |
JMP RX_ACK //RETURN TO THE ACK FUNCTION | |
//WRITE THE DATA BITS IN THE REGISTER R12 FOR LAST 2 BIT OF DATA | |
RX_WR2: | |
MOV R12.t0, r11.t2 | |
LSL R12, R12, 1 | |
//BY THIS STEP ALL THE 32 BIT OF DATA WILL GET FILL IN THE R12 REGISTER THAT IS TX FROM OTHER BB BLACK | |
MOV R12.t0, r11.t3 | |
JMP RX_ACK //RETURN TO THE ACK FUNCTION | |
//--------------------------------------------------------------------------------------- | |
//*************************************************************************************** | |
// THIS WILL SEND THE HIGH ACK AT BIT 1 OF THE SHIFT REGISTER TELLING THAT IT HAD RECEIVED THE DATA CORRECTLY | |
//------------------------------------------------------------------------------------------------- | |
// THIS IS THE HALT OF THE PROGRAM WITH SUSSESSFUL INDICATION SHOWS BLINKING OF LIGHT AT P8_20 PIN | |
EXIT: | |
//Setting the value the out pin CHECK LED | |
MOV r2, 1 << 31 //move out pin to | |
SBBO r2, r5, 0, 4 // the p8_20 pin is HIGH | |
HALT | |
//--------------------------------------------------------------------------------------- | |
//*************************************************************************************** | |
// CALL FUNCTION HERE | |
// CALL FOR A DELAY | |
DELAY: | |
MOV r1, OFF_DURATION // set up for the delay | |
LRR: | |
SUB r1,r1, 1 // subtract 1 from R1 | |
QBNE LRR, r1, 0 | |
RET | |
// perform a BIG LOOP for delay | |
DELAY1: | |
MOV r1, OFF_DURATION // set up for delay | |
LRR1: | |
SUB r1, r1, 1 // subtract 1 from R1 | |
MOV r8, 4 //RUN THE LOOP 4 TIMES | |
LRR2: | |
SUB r8, r8, 1 // subtract 1 from R1 | |
QBNE LRR2, r8, 0 // is R8 == 0? if no, then goto LRR2 | |
QBNE LRR1, r1, 0 // is R1 == 0? if no, then goto LRR1 | |
RET | |
// CALL FOR CLK PULSE | |
CP_PULSE: | |
//Setting the value the out pin CP | |
MOV r2, 1 << 14 //move out pin to | |
SBBO r2, r5, 0, 4 // the p8_16 pin is HIGH | |
MOV r1, OFF_DURATION // set up for the delay | |
DELAY3: | |
SUB r1,r1, 1 // subtract 1 from R1 | |
QBNE DELAY3, r1, 0 | |
//Setting the value the out pin CP | |
MOV r2, 1 << 14 //move out pin to | |
SBBO r2, r4, 0, 4 // the p8_16 pin is LOW | |
MOV r1, OFF_DURATION // set up for the delay | |
DELAY4: | |
SUB r1,r1, 1 // subtract 1 from R1 | |
QBNE DELAY4, r1, 0 | |
RET |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
.origin 0 | |
.entrypoint start | |
#define GPIO0 0x44E07000 | |
#define GPIO1 0x4804C000 | |
#define GPIO2 0x481AC000 | |
#define GPIO3 0x481AE000 | |
#define GPIO_OE 0x134 | |
#define GPIO_DATAIN 0x138 | |
#define GPIO_CLEARDATAOUT 0x190 | |
#define GPIO_SETDATAOUT 0x194 | |
#define INS_PER_MS 500 * 100 | |
#define ON_DURATION 250 * INS_PER_MS | |
#define OFF_DURATION 250 * INS_PER_MS | |
#define CPRUCFG c4 | |
//STORE THE NO. OF TIME INPUT BUTTON TO STORE | |
#define NUMBER_OF_BITS 8 | |
#define DS0 6 /* P8_3 38 GPIO 1_6 mode 7 */ | |
#define INPUT 7 /* P8_4 39 GPIO 1_7 mode 7 */ | |
#define OE 2 /* P8_5 34 GPIO 1_2 mode 7 */ //OE1 AND OE2 | |
#define S0 13 /* P8_11 45 GPIO 1_13 mode 7 */ | |
#define S1 12 /* P8_12 44 GPIO 1_12 mode 7 */ | |
#define MR 15 /* P8_15 47 GPIO 1_15 mode 7 */ | |
#define CP 14 /* P8_16 46 GPIO 1_14 mode 7 */ | |
#define CK_LED 31 /* P8_20 63 GPIO 1_31 mode 7 */ | |
//--------------------------------------------------------------------------------------- | |
//*************************************************************************************** | |
start: | |
// Enable the OCP master port, | |
lbco r0, CPRUCFG, 4, 4 // read SYSCFG | |
clr r0.t4 // clear SYSCFG[STANDBY_INIT] | |
sbco r0, CPRUCFG, 4, 4 // enable OCP master port | |
// move the no of bits to be store in the memory | |
MOV r0, NUMBER_OF_BITS | |
// STORE THE BIT DATA IN THE REGISTER | |
//TAKING THE REGISTER BIT AS(FROM LSB TO MSB) | |
// TWO BITS BIT 0 ANS BIT 1 WILL BE COMMON IN BOTH CONTROL REGISTER MODE AND DATA REGISTER MODE | |
// FOR CONTROL REGISTER BITS FOR MASTER (SENDING CTRL BITS FROM TX TO RX) | |
// DESCRIPTION BIT NO. STATE | |
// CTRL/DATA MODE 0 1 (COMMON) | |
// ACK 1 0 (COMMON) | |
// STROBE 2 1 | |
// RE/WR 3 0 | |
// RES. 4 - | |
// RES. 5 - | |
// RES. 6 - | |
// RES. 7 - | |
// FOR CONTROL REGISTER BITS FOR SLAVE (SENDING CTRL BITS FROM RX TO TX) FOR SUCCESSFUL HANDSAKING | |
// DESCRIPTION BIT NO. STATE | |
// CTRL/DATA MODE 0 1 (COMMON) | |
// ACK 1 1 (COMMON) | |
// STROBE 2 0 | |
// RE/WR 3 1 | |
// RES. 4 - | |
// RES. 5 - | |
// RES. 6 - | |
// RES. 7 - | |
// FOR DATA REGISTER BITS FROM MASTER (SENDING DATA FROM TX TO RX) | |
// DESCRIPTION BIT NO. STATE | |
// CTRL/DATA MODE 0 0 (COMMON) | |
// ACK 1 0 (COMMON) | |
// DATA 2 - | |
// DATA 3 - | |
// DATA 4 - | |
// DATA 5 - | |
// DATA 6 - | |
// DATA 7 - | |
// FOR DATA REGISTER BITS FROM SLAVE (SENDING DATA FROM TX TO RX) | |
// DESCRIPTION BIT NO. STATE | |
// CTRL/DATA MODE 0 0 (COMMON) | |
// ACK 1 1 (COMMON) | |
// DATA 2 - | |
// DATA 3 - | |
// DATA 4 - | |
// DATA 5 - | |
// DATA 6 - | |
// DATA 7 - | |
//---------------------------------------------------------------------------------------------------------- | |
//---------------------------------------------------------------------------------------------------------- | |
// THESE ARE COMMON FOR BOTH rx AND tx | |
MOV r6.b0, 0b00000101 // CONTROL BITS WHICH MAKES IT MASTER FOR COMMUNICATION | |
MOV r6.b1, 0b00001011 // CONTROL BITS WHICH MAKES IT SLAVE FOR COMMUNICATION | |
MOV r6.b2, 0b00000010 // SENDING THE DATA BIT TO FOR SUCCESFUL ACK OF DATA | |
MOV r6.b3, 0b00000001 // SENDING TO SHIFT THE SYSTEM TO CONTROL MODE | |
//example data of the register that will be transfer via shift register | |
MOV R9 , 0X0 //MOV O TO THE REGISTER | |
MOV R10.b0 , 0X7 //MOV 7 TO THE REGISTER ,AS THE DATA NEED TO SENT 6 TIMES AND ACK NEED TO RECEIVE 7 TIMES | |
MOV R11.b0 , 0b00000000 //MOV O TO THE REGISTER | |
MOV R12 , 0X0F0F0F0F //MOV THE DATA THAT NEED TO BE SENT | |
//set DS0 pin to ouput | |
MOV r3, GPIO1 | GPIO_OE | |
LBBO r2, r3, 0, 4 | |
CLR r2, r2, 6 //DS0 | |
SBBO r2, r3, 0, 4 | |
//set S0 pin to ouput | |
MOV r3, GPIO1 | GPIO_OE | |
LBBO r2, r3, 0, 4 | |
CLR r2, r2, 13 //S0 | |
SBBO r2, r3, 0, 4 | |
//set S1 pin to ouput | |
MOV r3, GPIO1 | GPIO_OE | |
LBBO r2, r3, 0, 4 | |
CLR r2, r2, 12 //S1 | |
SBBO r2, r3, 0, 4 | |
//set OE1 and OE2 pin to ouput | |
MOV r3, GPIO1 | GPIO_OE | |
LBBO r2, r3, 0, 4 | |
CLR r2, r2, 2 //OE1 and OE2 | |
SBBO r2, r3, 0, 4 | |
//set CP pin to ouput | |
MOV r3, GPIO1 | GPIO_OE | |
LBBO r2, r3, 0, 4 | |
CLR r2, r2, 14 //CP | |
SBBO r2, r3, 0, 4 | |
//set COMMON for Q0 and Q7 pin to INPUT | |
MOV r3, GPIO1 | GPIO_OE | |
LBBO r2, r3, 0, 4 | |
SET r2, r2, 7 //INPUT | |
SBBO r2, r3, 0, 4 | |
//set CHECK LED pin to ouput here | |
MOV r3, GPIO1 | GPIO_OE | |
LBBO r2, r3, 0, 4 | |
CLR r2, r2, 31 //CHECK LED | |
SBBO r2, r3, 0, 4 | |
//set MASTER RESET pin to ouput here | |
MOV r3, GPIO1 | GPIO_OE | |
LBBO r2, r3, 0, 4 | |
CLR r2, r2, 15 //MASTER RESET | |
SBBO r2, r3, 0, 4 | |
//setting the register for data high and GPIO1 | |
MOV r4, GPIO1 | GPIO_CLEARDATAOUT | |
MOV r5, GPIO1 | GPIO_SETDATAOUT | |
//--------------------------------------------------------------------------------------- | |
//*************************************************************************************** | |
//LOAD THE CONTROL BITS IN SHIFT REGISTER | |
TX_CLOAD: | |
// LOAD THE INPUT SHIFT REGISTER IN SHIFT RIGHT MODE | |
//Setting the value the out pin S0 | |
MOV r2, 1 << 13 //move out pin to | |
SBBO r2, r5, 0, 4 // the p8_11 pin is HIGH | |
//Setting the value the out pin S1 | |
MOV r2, 1 << 12 //move out pin to | |
SBBO r2, r4, 0, 4 // the p8_12 pin is LOW | |
//Setting the value the out pin OE1 and OE2 | |
MOV r2, 1 << 2 //move out pin to | |
SBBO r2, r5, 0, 4 // the p8_5 pin is HIGH | |
//Setting the value the out pin MR | |
MOV r2, 1 << 15 //move out pin to | |
SBBO r2, r5, 0, 4 // the p8_15 pin is HIGH | |
//Setting the value the out pin DS0 | |
MOV r2, 1 << 6 //move out pin to | |
SBBO r2, r4, 0, 4 // the p8_3 pin is LOW | |
//Setting the value the out pin CHECK LED | |
MOV r2, 1 << 31 //move out pin to | |
SBBO r2, r5, 0, 4 // the p8_20 pin is HIGH | |
//*************************************************************************************** | |
//NOW THE DATA OUT MODE TO THE CONNECTED SHIFT REGISTER FORN BEING USED AS TX | |
// THE MODE OF 74HC299 FROM LOAD TO SHIFT RIGHT MODE | |
// SETTING UP THE DELAY | |
MOV r1,OFF_DURATION // set up for the delay | |
// perform a LOOP for delay | |
LTCM2: | |
SUB r1, r1, 1 // subtract 1 from R1 | |
QBNE LTCM2, r1, 0 // is R1 == 0? if no, then goto L1 | |
TX_OUT2: | |
// NOW THE DATA STORE IN THE REGISTER IS MADE TO THE DATA PIN OF THE SHIFT REGISTER R6 | |
//Setting the value the out pin CP | |
MOV r2, 1 << 14 //move out pin to | |
SBBO r2, r5, 0, 4 // the p8_16 pin is HIGH | |
//Setting the value the out pin DS0 | |
MOV r2, 1 << 6 //move out pin to | |
SBBO r2, r4, 0, 4 // the p8_3 pin is LOW | |
// SETTING UP THE DELAY | |
MOV r1, OFF_DURATION // set up for the delay | |
// perform a LOOP for delay | |
LTCM3: | |
SUB r1, r1, 1 // subtract 1 from R1 | |
QBNE LTCM3, r1, 0 // is R1 == 0? if no, then goto L1 | |
//Setting the value the out pin CP | |
MOV r2, 1 << 14 //move out pin to | |
SBBO r2, r4, 0, 4 // the p8_16 pin is LOW | |
//*************************************************************************************** | |
//JUMP_MAS: | |
//CHECK FOR THE CONTROL BIT WRITTING TO THE MASTER SHIFT REGISTER | |
QBBS TX_CSET, r6.t7 // if the bit is high, jump to BIT_HIGH | |
QBBC TX_CCLR, r6.t7 // if the bit is low, jump to BIT_LOW | |
//JUMP_SLV: | |
//CHECK FOR THE CONTROL BIT WRITTING TO THE SLAVE SHIFT REGISTER | |
// QBBS DATA_SET, r6.t15 // if the bit is high, jump to BIT_HIGH | |
// QBBC DATA_CLR, r6.t15 // if the bit is low, jump to BIT_LOW | |
//*************************************************************************************** | |
TX_CSET: | |
//Setting the value the out pin DS0 | |
MOV r2, 1 << 6 //move out pin to | |
SBBO r2, r5, 0, 4 // the p8_3 pin is HIGH | |
// SETTING UP THE DELAY | |
MOV r1, OFF_DURATION // set up for the delay | |
// perform a LOOP for delay | |
LTCM4: | |
SUB r1, r1, 1 // subtract 1 from R1 | |
QBNE LTCM4, r1, 0 // is R1 == 0? if no, then goto L1 | |
//shift the bit store in the r6 to the RIGHT | |
LSL r6, r6, 1 | |
// decrement the value of bits to be store and check its value | |
SUB r0, r0, 1 | |
QBEQ TX_OUT_E, r0, 0 | |
QBNE TX_OUT2, r0, 0 | |
TX_CCLR: | |
//Setting the value the out pin DS0 | |
MOV r2, 1 << 6 //move out pin to | |
SBBO r2, r4, 0, 4 // the p8_3 pin is LOW | |
// SETTING UP THE DELAY | |
MOV r1, OFF_DURATION // set up for the delay | |
// perform a LOOP for delay | |
LTCM5: | |
SUB r1, r1, 1 // subtract 1 from R1 | |
QBNE LTCM5, r1, 0 // is R1 == 0? if no, then goto L1 | |
//shift the bit store in the r6 to the RIGHT | |
LSL r6, r6, 1 | |
// decrement the value of bits to be store and check its value | |
SUB r0, r0, 1 | |
QBEQ TX_OUT_E, r0, 0 | |
QBNE TX_OUT2, r0, 0 | |
//*************************************************************************************** | |
// CHANGING THE STATE OF THE ENABLE PIN | |
TX_OUT_E: | |
//Setting the value the out pin DS0 | |
MOV r2, 1 << 6 //move out pin to | |
SBBO r2, r4, 0, 4 // the p8_3 pin is LOW | |
//Setting the value the out pin OE1 and OE2 | |
MOV r2, 1 << 2 //move out pin to | |
SBBO r2, r4, 0, 4 // the p8_5 pin is LOW | |
//Setting the value the out pin CP | |
MOV r2, 1 << 14 //move out pin to | |
SBBO r2, r5, 0, 4 // the p8_16 pin is HIGH | |
// SETTING UP THE DELAY | |
MOV r1, OFF_DURATION // set up for a .9 second delay | |
// perform a LOOP for delay | |
LTCE1: | |
SUB r1, r1, 1 // subtract 1 from R1 | |
// SETTING UP THE DELAY | |
MOV r8, 10 //RUN THE LOOP 4 TIMES | |
LTCE2: | |
SUB r8, r8, 1 // subtract 1 from R1 | |
QBNE LTCE2, r8, 0 // is R8 == 0? if no, then goto L1 | |
QBNE LTCE1, r1, 0 // is R1 == 0? if no, then goto L1 | |
//Setting the value the out pin CP | |
MOV r2, 1 << 14 //move out pin to | |
SBBO r2, r4, 0, 4 // the p8_16 pin is LOW | |
//--------------------------------------------------------------------------------------- | |
//--------------------------------------------------------------------------------------- | |
//Setting the value the out pin CHECK LED | |
MOV r2, 1 << 31 //move out pin to | |
SBBO r2, r4, 0, 4 // the p8_20 pin is LOW | |
//--------------------------------------------------------------------------------------- | |
//--------------------------------------------------------------------------------------- | |
//--------------------------------------------------------------------------------------- | |
//*************************************************************************************** | |
//RESETING THE SHIFT REGISTER FOR PARALLEL LOAD MODE | |
TX_MR: | |
//Setting the value the out pin MR | |
MOV r2, 1 << 15 //move out pin to | |
SBBO r2, r4, 0, 4 // the p8_20 pin is LOW | |
// SETTING UP THE DELAY | |
MOV r1, OFF_DURATION // set up for the delay | |
// perform a LOOP for delay | |
LMR1: | |
SUB r1, r1, 1 // subtract 1 from R1 | |
QBNE LMR1, r1, 0 // is R1 == 0? if no, then goto L1 | |
//Setting the value the out pin MR | |
MOV r2, 1 << 15 //move out pin to | |
SBBO r2, r5, 0, 4 // the p8_20 pin is HIGH | |
//--------------------------------------------------------------------------------------- | |
//*************************************************************************************** | |
// SETTING THE REGISTER TO PARALLEL LOAD MODE | |
TX_PLOAD: | |
//Setting the value the out pin S0 | |
MOV r2, 1 << 13 //move out pin to | |
SBBO r2, r5, 0, 4 // the p8_11 pin is HIGH | |
//Setting the value the out pin S1 | |
MOV r2, 1 << 12 //move out pin to | |
SBBO r2, r5, 0, 4 // the p8_12 pin is HIGH | |
//Setting the value the out pin OE1 and OE2 | |
MOV r2, 1 << 2 //move out pin to | |
SBBO r2, r4, 0, 4 // the p8_5 pin is LOW | |
//Setting the value the out pin DS0 | |
MOV r2, 1 << 6 //move out pin to | |
SBBO r2, r4, 0, 4 // the p8_3 pin is LOW | |
//*************************************************************************************** | |
//Setting the value the out pin CP | |
MOV r2, 1 << 14 //move out pin to | |
SBBO r2, r5, 0, 4 // the p8_16 pin is HIGH | |
// SETTING UP THE DELAY | |
MOV r1, OFF_DURATION // set up for the delay | |
// perform a LOOP for delay | |
LTP1: | |
SUB r1, r1, 1 // subtract 1 from R1 | |
QBNE LTP1, r1, 0 // is R1 == 0? if no, then goto L1 | |
//Setting the value the out pin CP | |
MOV r2, 1 << 14 //move out pin to | |
SBBO r2, r4, 0, 4 // the p8_16 pin is LOW | |
//*************************************************************************************** | |
// CLKING IN THE DATA GIVEN BY RECEIVER SHIFT REGISTER | |
// SETTING UP THE DELAY | |
MOV r1, ON_DURATION // set up for a .9 second delay | |
// perform a LOOP for delay | |
LTP2: | |
SUB r1, r1, 1 // subtract 1 from R1 | |
// SETTING UP THE DELAY | |
MOV r8, 4 //RUN THE LOOP 4 TIMES | |
// perform a LOOP for delay | |
LTP3: | |
SUB r8, r8, 1 // subtract 1 from R1 | |
QBNE LTP3, r8, 0 // is R8 == 0? if no, then goto L1 | |
QBNE LTL2, r1, 0 // is R1 == 0? if no, then goto L1 | |
//Setting the value the out pin CP | |
MOV r2, 1 << 14 //move out pin to | |
SBBO r2, r5, 0, 4 // the p8_16 pin is HIGH | |
// SETTING UP THE DELAY | |
MOV r1, OFF_DURATION // set up for the delay | |
// perform a LOOP for delay | |
LTP4: | |
SUB r1, r1, 1 // subtract 1 from R1 | |
QBNE LTP4, r1, 0 // is R1 == 0? if no, then goto L1 | |
//Setting the value the out pin CP | |
MOV r2, 1 << 14 //move out pin to | |
SBBO r2, r4, 0, 4 // the p8_16 pin is LOW | |
// SETTING UP THE DELAY | |
MOV r1, OFF_DURATION // set up for the delay | |
// perform a LOOP for delay | |
LTP5: | |
SUB r1, r1, 1 // subtract 1 from R1 | |
QBNE LTP5, r1, 0 // is R1 == 0? if no, then goto L1 | |
//--------------------------------------------------------------------------------------- | |
//*************************************************************************************** | |
// SETTING THE REGISTER TO SHIFT RIGHT MODE TO LOAD THE ACK DATA | |
TX_ASTORE1: | |
//Setting the value the out pin S0 | |
MOV r2, 1 << 13 //move out pin to | |
SBBO r2, r5, 0, 4 // the p8_11 pin is HIGH | |
//Setting the value the out pin S1 | |
MOV r2, 1 << 12 //move out pin to | |
SBBO r2, r4, 0, 4 // the p8_12 pin is LOW | |
//Setting the value the out pin OE1 and OE2 | |
MOV r2, 1 << 2 //move out pin to | |
SBBO r2, r4, 0, 4 // the p8_5 pin is LOW | |
//Setting the value the out pin DS0 | |
MOV r2, 1 << 6 //move out pin to | |
SBBO r2, r4, 0, 4 // the p8_3 pin is LOW | |
//DATA NOW GET OUT FROM THE Q0 PIN OF THE SHIFT REGISTER | |
//*************************************************************************************** | |
//Setting the value the out pin CP | |
MOV r2, 1 << 14 //move out pin to | |
SBBO r2, r5, 0, 4 // the p8_16 pin is HIGH | |
MOV r1,OFF_DURATION // set up for a delay | |
// perform a half second delay | |
LTAS1: | |
SUB r1, r1, 1 // subtract 1 from R1 | |
QBNE LTAS1, r1, 0 // is R1 == 0? if no, then goto L1 | |
//Setting the value the out pin CP | |
MOV r2, 1 << 14 //move out pin to | |
SBBO r2, r4, 0, 4 // the p8_16 pin is LOW | |
// move the no of bits to be store in the memory | |
MOV r0, 8 | |
// AS THE DATA IS BEING LOADED FROM THE SHIFT REGISTER TO PRU REGISTER IN SHIFT LEFT MODE | |
MOV r1,OFF_DURATION // set up for a delay | |
// perform a half second delay | |
LTAS2: | |
SUB r1, r1, 1 // subtract 1 from R1 | |
QBNE LTAS2, r1, 0 // is R1 == 0? if no, then goto L1 | |
TX_ABIT: | |
//Setting the value the out pin CP | |
MOV r2, 1 << 14 //move out pin to | |
SBBO r2, r5, 0, 4 // the p8_16 pin is HIGH | |
//set IN pin to INPUT | |
MOV r3, GPIO1 | GPIO_DATAIN | |
LBBO r7, r3, 0, 7 // P8_04 | |
MOV r1, OFF_DURATION // set up of delay | |
LTAS3: | |
SUB r1, r1, 1 // subtract 1 from R1 | |
QBNE LTAS3, r1, 0 // is R1 == 0? if no, then goto L1 | |
//Setting the value the out pin CP | |
MOV r2, 1 << 14 //move out pin to | |
SBBO r2, r4, 0, 4 // the p8_16 pin is LOW | |
// TAKE THE ACK BIT INTO THE REGISTER FOR THE CONFORMATION OF HAND SAKING | |
QBBS TX_ABIT_SET, r7.t0 // if the bit is high, jump to LED_HIGH | |
QBBC TX_ABIT_CLR, r7.t0 // if the bit is low, jump to LED_LOW | |
// STORE 1 VALUE IN THE REGISTER | |
TX_ABIT_SET: | |
//PERFORM THE LEFT SHIFT OPERATION ON THE REGISTER R6 | |
LSL r9, r9, 1 | |
ADD r9, r9.b0, 0b00000001 | |
MOV r1, OFF_DURATION // set up of delay | |
LTAS4: | |
SUB r1, r1, 1 // subtract 1 from R1 | |
QBNE LTAS4, r1, 0 // is R1 == 0? if no, then goto L1 | |
SUB r0, r0, 1 | |
QBEQ TX_ATEST, r0, 0 | |
QBNE TX_ABIT, r0, 0 | |
//STORE 0 VALUE IN THE REGISTER | |
TX_ABIT_CLR: | |
//PERFORM THE LEFT SHIFT OPERATION ON THE REGISTER R6 | |
LSL r9, r9, 1 | |
MOV r1, OFF_DURATION // set up of delay | |
LTAS5: | |
SUB r1, r1, 1 // subtract 1 from R1 | |
QBNE LTAS5, r1, 0 // is R1 == 0? if no, then goto L1 | |
SUB r0, r0, 1 | |
QBEQ TX_ATEST, r0, 0 | |
QBNE TX_ABIT, r0, 0 | |
//--------------------------------------------------------------------------------------- | |
//THE DATA GET LOADED TO THE REGISTER R9 | |
//--------------------------------------------------------------------------------------- | |
//--------------------------------------------------------------------------------------- | |
//*************************************************************************************** | |
//TESTING FOR THE HIGH BIT 1 ACK BIT AT BIT 1 IN REGISTER R9 | |
TX_ATEST: | |
QBBC TX_MR, r9.t1 // if the bit is low, jump to TX_MR (MASTER RESET AND AGAIN TEST IT) | |
MOV R10.b1 , 0X6 // THIS LOOP WILL RUN FOR 6 TIME TO STORE ALL SIX BIT OF DATA IN ONE REGISTER OF PRU | |
SUB R10.b0, R10.b0, 1 //DECREASE THE VALUE BY ONE AS 6 BIT OF DATA WILL COME OUT FOR ONLY TIMES | |
QBEQ EXIT, R10.b0, 0 | |
//--------------------------------------------------------------------------------------- | |
//*************************************************************************************** | |
TX_DATA: | |
// GETTING DATA REGISTER BITS REGISTER READY FOR TRANSMISSION | |
// THIS LOOP STORE THE 6 BIT OF DATAIN ONE BYTE REGISTER THAT WILL BE TX THROUGH THE SHIFT REGISTER | |
TX_WR2: | |
MOV R11.t0, R12.t31 // TAKE DATA FROM MSB TO LSB | |
LSL R11.b0,R11.b0,1 // SHIFT THE DATA BY ONE | |
LSL R12, R12, 1 // SHIFT THE DATA BIT BY ONE | |
SUB R10.b1, R10.b1, 1 // | |
QBNE TX_WR1, r0, 0 // LOOP RUN FOR TAKING 6 BIT OF MSB DATA BITS | |
MOV R11.t0, 0 // THE FIRST BIT IS CONTROL BIT | |
LSL R11.b0,R11.b0,1 // SHIFT THE DATA BY ONE | |
MOV R11.t0, 0 // THE SECOND BIT AS ACK BIT AT BIT 1 | |
// AS THE ACK IS IS RECEIVED ITS FOR THE DATA TRANSMISSION | |
//FOR 8 BIT SHIFT REGISTER DATA IS TRANMITTED 6 BIT AT A TIME | |
// OTHER TWO BIT ARE RESERVED FOR ack AND control/data MODE SIGNAL | |
// LOAD THE INPUT SHIFT REGISTER IN SHIFT RIGHT MODE | |
//Setting the value the out pin S0 | |
MOV r2, 1 << 13 //move out pin to | |
SBBO r2, r5, 0, 4 // the p8_11 pin is HIGH | |
//Setting the value the out pin S1 | |
MOV r2, 1 << 12 //move out pin to | |
SBBO r2, r4, 0, 4 // the p8_12 pin is LOW | |
//Setting the value the out pin OE1 and OE2 | |
MOV r2, 1 << 2 //move out pin to | |
SBBO r2, r5, 0, 4 // the p8_5 pin is HIGH | |
//Setting the value the out pin MR | |
MOV r2, 1 << 15 //move out pin to | |
SBBO r2, r5, 0, 4 // the p8_15 pin is HIGH | |
//Setting the value the out pin DS0 | |
MOV r2, 1 << 6 //move out pin to | |
SBBO r2, r4, 0, 4 // the p8_3 pin is LOW | |
//*************************************************************************************** | |
//NOW THE DATA IS TRANSMIT TO OTHER BEAGLEBONE PRU REGISTER | |
// THE MODE OF 74HC299 FROM LOAD TO SHIFT RIGHT MODE | |
//LENGTH OF DATA TO BE TRANSFER | |
MOV R0, 32 | |
// SETTING UP THE DELAY | |
MOV r1,OFF_DURATION // set up for the delay | |
// perform a LOOP for delay | |
LTD1: | |
SUB r1, r1, 1 // subtract 1 from R1 | |
QBNE LTD1, r1, 0 // is R1 == 0? if no, then goto L1 | |
TX_OUT1: | |
// NOW THE DATA STORE IN THE REGISTER IS MADE TO THE DATA PIN OF THE SHIFT REGISTER R6 | |
//Setting the value the out pin CP | |
MOV r2, 1 << 14 //move out pin to | |
SBBO r2, r5, 0, 4 // the p8_16 pin is HIGH | |
//Setting the value the out pin DS0 | |
MOV r2, 1 << 6 //move out pin to | |
SBBO r2, r4, 0, 4 // the p8_3 pin is LOW | |
// SETTING UP THE DELAY | |
MOV r1, OFF_DURATION // set up for the delay | |
// perform a LOOP for delay | |
LTD3: | |
SUB r1, r1, 1 // subtract 1 from R1 | |
QBNE LTD3, r1, 0 // is R1 == 0? if no, then goto L1 | |
//Setting the value the out pin CP | |
MOV r2, 1 << 14 //move out pin to | |
SBBO r2, r4, 0, 4 // the p8_16 pin is LOW | |
//*************************************************************************************** | |
JUMP_DATA: | |
//CHECK FOR THE CONTROL BIT WRITTING TO THE MASTER SHIFT REGISTER | |
QBBS TX_D_SET, r11.t0 // if the bit is high, jump to BIT_HIGH | |
QBBC TX_D_CLR, r11.t0 // if the bit is low, jump to BIT_LOW | |
//*************************************************************************************** | |
TX_D_SET: | |
//Setting the value the out pin DS0 | |
MOV r2, 1 << 6 //move out pin to | |
SBBO r2, r5, 0, 4 // the p8_3 pin is HIGH | |
// SETTING UP THE DELAY | |
MOV r1, OFF_DURATION // set up for the delay | |
// perform a LOOP for delay | |
LTD4: | |
SUB r1, r1, 1 // subtract 1 from R1 | |
QBNE LTD4, r1, 0 // is R1 == 0? if no, then goto L1 | |
//shift the bit store in the r6 to the RIGHT | |
LSL r6, r6, 1 | |
// decrement the value of bits to be store and check its value | |
SUB r0, r0, 1 | |
QBEQ EXIT, r0, 0 | |
QBNE TX_OUT1, r0, 0 | |
TX_D_CLR: | |
//Setting the value the out pin DS0 | |
MOV r2, 1 << 6 //move out pin to | |
SBBO r2, r4, 0, 4 // the p8_3 pin is LOW | |
// SETTING UP THE DELAY | |
MOV r1, OFF_DURATION // set up for the delay | |
// perform a LOOP for delay | |
LTD5: | |
SUB r1, r1, 1 // subtract 1 from R1 | |
QBNE LTD5, r1, 0 // is R1 == 0? if no, then goto L1 | |
//shift the bit store in the r6 to the RIGHT | |
LSL r6, r6, 1 | |
// decrement the value of bits to be store and check its value | |
SUB r0, r0, 1 | |
QBEQ EXIT, r0, 0 | |
QBNE TX_OUT1, r0, 0 | |
//*************************************************************************************** | |
// CHANGING THE STATE OF THE ENABLE PIN | |
TX_OUT_E1: | |
//Setting the value the out pin DS0 | |
MOV r2, 1 << 6 //move out pin to | |
SBBO r2, r4, 0, 4 // the p8_3 pin is LOW | |
//Setting the value the out pin OE1 and OE2 | |
MOV r2, 1 << 2 //move out pin to | |
SBBO r2, r4, 0, 4 // the p8_5 pin is LOW | |
//Setting the value the out pin CP | |
MOV r2, 1 << 14 //move out pin to | |
SBBO r2, r5, 0, 4 // the p8_16 pin is HIGH | |
// SETTING UP THE DELAY | |
MOV r1, OFF_DURATION // set up for a .9 second delay | |
// perform a LOOP for delay | |
LTDE1: | |
SUB r1, r1, 1 // subtract 1 from R1 | |
// SETTING UP THE DELAY | |
MOV r8, 10 //RUN THE LOOP 4 TIMES | |
LTDE2: | |
SUB r8, r8, 1 // subtract 1 from R1 | |
QBNE LTDE2, r8, 0 // is R8 == 0? if no, then goto L1 | |
QBNE LTDE1, r1, 0 // is R1 == 0? if no, then goto L1 | |
//Setting the value the out pin CP | |
MOV r2, 1 << 14 //move out pin to | |
SBBO r2, r4, 0, 4 // the p8_16 pin is LOW | |
JMP TX_PLOAD // AGAIN REPEAT THE SAME PROCESS FOR 5 TIMES MORE AS THIS REFLECT THE 32 BIT DATA IS SENT | |
//------------------------------------------------------------------------------------------------- | |
// THIS IS THE HALT OF THE PROGRAM WITH SUSSESSFUL INDICATION SHOWS BLINKING OF LIGHT AT P8_20 PIN | |
EXIT: | |
//Setting the value the out pin CHECK LED | |
MOV r2, 1 << 31 //move out pin to | |
SBBO r2, r5, 0, 4 // the p8_20 pin is HIGH | |
HALT |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment