Esempio n. 1
0
void write(u32 x, u32 y, u32 vali)
{
	CONTROLLER_mWriteReg(SW_BASE,VALI,vali);
	CONTROLLER_mWriteReg(SW_BASE,ADR_X,x);
	CONTROLLER_mWriteReg(SW_BASE,ADR_Y,y);
	CONTROLLER_mWriteReg(SW_BASE,OP_CODE,3);
	delay();
	u32 written = CONTROLLER_mReadReg(SW_BASE,WRITTEN);
	while(written == 0) written = CONTROLLER_mReadReg(SW_BASE,WRITTEN);

	CONTROLLER_mWriteReg(SW_BASE,OP_CODE,2);
}
Esempio n. 2
0
int main(void)
{
	CONTROLLER_mWriteReg(SW_BASE,OP_CODE,4); // reset
	CONTROLLER_mWriteReg(SW_BASE,DELAY_TIME,50000000);
	delay();

	setup();


	delay();

	CONTROLLER_mWriteReg(SW_BASE,OP_CODE,1);

	while(1)
	{
	}
}
Esempio n. 3
0
/* UDP_SERVER_FUNCTION
 *
 * This function is the main callback when a UDP packet is received.
 *
 * It copies the payload of the UDP packet to the shared memory
 * interfaces of the CONTROLLER PCORE (write data into REG0), raises a ready flag (write START_COMPUTING into REG2), waits for
 * a completion flag to be returned (wait START_READING from REG2) and read back the results (reads data from REG1)
 * The result is then copied into the payload of a new UDP packet and returned.
 *
 */
void udp_server_function(void *arg, struct udp_pcb *pcb,
		struct pbuf *p, struct ip_addr *addr, u16_t port){

	int k;	// An iterator for loops

	//printf("\n");
	//printf("Received an UDP packet ...\n");
	// Only respond to packets of the correct size
	// (we could make the protocol more complex later on)
	if (p->len == (NINPUTS)*sizeof(unsigned int)){

		// Copy payload into something better aligned
		unsigned int   payload_temp[NINPUTS];
		unsigned char *payload_temp_char = (unsigned char *)payload_temp;

		unsigned char *payload_ptr;
		payload_ptr = (unsigned char *)p->payload;
		for (k=0; k<(NINPUTS)*sizeof(unsigned int); k++){
				payload_temp_char[k] = payload_ptr[k];
		}

		// Variables for shared memory interface


		float *payload_temp_fl = (float *)payload_temp;

		//printf("Writing data ...\n");

		for (k=0; k<2; k++){
			//payload_temp[k]=0;
			//printf("u[%d] = %5.4f\n", k,(float)payload_temp[k]);
			printf("x[%d] = %5.4f\n", k,payload_temp_fl[k]);
		}
		// Copy stuff in REG0
		for (k=0; k<NINPUTS; k++){
		
			//printf("x[%d] = %5.4f\n", k,payload_temp_fl[k]);
			CONTROLLER_mWriteReg(0x77200000, 0, payload_temp[k]); //writing to REG0
		}



		CONTROLLER_mWriteReg(0x77200000, 2*4, START_COMPUTING); //writing to REG2


		/* Poll the output ready register (REG2) until it becomes unity*/
		//printf("Waiting data ready ...\n");
		Xuint32 Data_Reg2;
		while(1){
			Data_Reg2=CONTROLLER_mReadReg(0x77200000, 2*4); //reading from REG2
			//printf("Reg2 = %5.4f\n", (float)Data_Reg2);
			if (Data_Reg2 == START_READING){
				break;
			}
		}


		//printf("Reading data ...\n");
		Xuint32   payload_read[NOUTPUTS];
		// read stuff from


		for (k=0; k<NOUTPUTS; k++){
			payload_read[k]=CONTROLLER_mReadReg(0x77200000, 1*4);//reading from REG1
			//printf("u[%d] = %5.4f\n", k,(float)payload_read[k]);
		}

		float *payload_read_fl = (float *)payload_read;

	/*	//debug only remove
		payload_read[0]=1065353216; //1 in float
		payload_read[1]=1073741824; //2 in float
*/

		for (k=0; k<NOUTPUTS; k++){
			printf("debug u[%d] = %5.4f\n", k,(float)payload_read_fl[k]);
		}


		// Create a reply
		struct pbuf pnew;


		pnew.next = NULL;
		pnew.payload = payload_read;
		pnew.len = NOUTPUTS*4;
		pnew.type = PBUF_RAM;
		pnew.tot_len = pnew.len;
		pnew.ref = 1;
		pnew.flags = 0;

		udp_sendto(pcb, &pnew, addr, port);
		//printf("Data sent to PC\n");

	}
	pbuf_free(p);
}