NYP

Dependencies:   mbed-rtos mbed

Fork of rtos_mutex by mbed official

Committer:
ha731548874
Date:
Wed May 02 03:30:28 2018 +0000
Revision:
8:075a9610e2cd
Parent:
7:bd0aa7f21f53
NYP

Who changed what in which revision?

UserRevisionLine numberNew contents of line
emilmont 1:0f886ffbe0c1 1 #include "mbed.h"
mbed_official 7:bd0aa7f21f53 2 #include "rtos.h"
ha731548874 8:075a9610e2cd 3 DigitalOut l1(LED1);
ha731548874 8:075a9610e2cd 4 DigitalOut l2(LED2);
ha731548874 8:075a9610e2cd 5 DigitalOut l3(LED3);
ha731548874 8:075a9610e2cd 6 DigitalOut l4(LED4);
ha731548874 8:075a9610e2cd 7 Thread servo;
ha731548874 8:075a9610e2cd 8 //Mutex stdio_mutex;
ha731548874 8:075a9610e2cd 9 RawSerial motor(PC_4,PC_5);
ha731548874 8:075a9610e2cd 10 unsigned char tx_buffer[3];
ha731548874 8:075a9610e2cd 11 unsigned char tx_buffer_ptr = 0;
ha731548874 8:075a9610e2cd 12 unsigned char tx_buffer_full = false;
ha731548874 8:075a9610e2cd 13 unsigned char rx_buffer[6];
ha731548874 8:075a9610e2cd 14 unsigned char rx_buffer_ptr = 0;
ha731548874 8:075a9610e2cd 15 unsigned char rx_buffer_full = false;
ha731548874 8:075a9610e2cd 16 signed short int motorcp[] = {8500,8500};
ha731548874 8:075a9610e2cd 17 unsigned short int Position;
ha731548874 8:075a9610e2cd 18 int MotorID;
ha731548874 8:075a9610e2cd 19 void Tx_interrupt();
ha731548874 8:075a9610e2cd 20 void Rx_interrupt();
ha731548874 8:075a9610e2cd 21 void motor_update(unsigned char Id, unsigned short int Position)
ha731548874 8:075a9610e2cd 22 {
ha731548874 8:075a9610e2cd 23 unsigned char id,lo,hi;
ha731548874 8:075a9610e2cd 24 id=0x80|Id;
ha731548874 8:075a9610e2cd 25 hi=(Position>>7)&0x007F;
ha731548874 8:075a9610e2cd 26 lo=Position&0x007F;
ha731548874 8:075a9610e2cd 27 NVIC_DisableIRQ(USART3_IRQn);
ha731548874 8:075a9610e2cd 28 tx_buffer[0] = id;
ha731548874 8:075a9610e2cd 29 tx_buffer[1] = hi;
ha731548874 8:075a9610e2cd 30 tx_buffer[2] = lo;
ha731548874 8:075a9610e2cd 31 // wait(0.0008);
ha731548874 8:075a9610e2cd 32 NVIC_EnableIRQ(USART3_IRQn);
emilmont 1:0f886ffbe0c1 33 }
ha731548874 8:075a9610e2cd 34 void tx_thread()
ha731548874 8:075a9610e2cd 35 {
ha731548874 8:075a9610e2cd 36 // stdio_mutex.lock();
ha731548874 8:075a9610e2cd 37 for(MotorID=0;MotorID<=1;MotorID++)
ha731548874 8:075a9610e2cd 38 {
ha731548874 8:075a9610e2cd 39 motor_update(MotorID,motorcp[MotorID]);
ha731548874 8:075a9610e2cd 40 wait_us(900);
ha731548874 8:075a9610e2cd 41 }
ha731548874 8:075a9610e2cd 42 // stdio_mutex.unlock();
ha731548874 8:075a9610e2cd 43 }
ha731548874 8:075a9610e2cd 44 void SERVO_thread()
ha731548874 8:075a9610e2cd 45 {
ha731548874 8:075a9610e2cd 46 motor.format(8,Serial::Even,1);
ha731548874 8:075a9610e2cd 47 motor.baud(115200);
ha731548874 8:075a9610e2cd 48 rx_buffer_ptr = 0;
ha731548874 8:075a9610e2cd 49 rx_buffer_full = false;
ha731548874 8:075a9610e2cd 50 motor.attach(&Rx_interrupt, Serial::RxIrq);
ha731548874 8:075a9610e2cd 51 motor.attach(&Tx_interrupt, Serial::TxIrq);
ha731548874 8:075a9610e2cd 52 NVIC_EnableIRQ(USART3_IRQn);
ha731548874 8:075a9610e2cd 53 RtosTimer motorposition(tx_thread);
ha731548874 8:075a9610e2cd 54 motorposition.start(10);
ha731548874 8:075a9610e2cd 55 while(1)
ha731548874 8:075a9610e2cd 56 {
ha731548874 8:075a9610e2cd 57 motorcp[0]=7500;
ha731548874 8:075a9610e2cd 58 motorcp[1]=7500;
ha731548874 8:075a9610e2cd 59 Thread::wait(1000);
ha731548874 8:075a9610e2cd 60 motorcp[0]=8500;
ha731548874 8:075a9610e2cd 61 motorcp[1]=8500;
ha731548874 8:075a9610e2cd 62 Thread::wait(1000);
emilmont 1:0f886ffbe0c1 63 }
emilmont 1:0f886ffbe0c1 64 }
ha731548874 8:075a9610e2cd 65 int main()
ha731548874 8:075a9610e2cd 66 {
ha731548874 8:075a9610e2cd 67 servo.start(SERVO_thread);
ha731548874 8:075a9610e2cd 68 while (1)
ha731548874 8:075a9610e2cd 69 {
ha731548874 8:075a9610e2cd 70 l1=!l1;
ha731548874 8:075a9610e2cd 71 Thread::wait(1000);
ha731548874 8:075a9610e2cd 72 // printf("Tx : %d %x %x\r\n",tx_buffer[0],tx_buffer[1],tx_buffer[2]);
ha731548874 8:075a9610e2cd 73 // printf("RX : %d %x %x %d %x %x \r\n",rx_buffer[0], rx_buffer[1],rx_buffer[2],rx_buffer[3],rx_buffer[4],rx_buffer[5]);
ha731548874 8:075a9610e2cd 74 }
emilmont 1:0f886ffbe0c1 75 }
ha731548874 8:075a9610e2cd 76 void Tx_interrupt()
ha731548874 8:075a9610e2cd 77 {
ha731548874 8:075a9610e2cd 78 while(motor.writeable())
ha731548874 8:075a9610e2cd 79 {
ha731548874 8:075a9610e2cd 80 motor.putc(tx_buffer[tx_buffer_ptr]);
ha731548874 8:075a9610e2cd 81 tx_buffer_ptr++;
ha731548874 8:075a9610e2cd 82 if(tx_buffer_ptr==3)
ha731548874 8:075a9610e2cd 83 tx_buffer_ptr = 0;
ha731548874 8:075a9610e2cd 84 }
ha731548874 8:075a9610e2cd 85 return;
ha731548874 8:075a9610e2cd 86 }
ha731548874 8:075a9610e2cd 87 void Rx_interrupt()
ha731548874 8:075a9610e2cd 88 {
ha731548874 8:075a9610e2cd 89 while(motor.readable())
ha731548874 8:075a9610e2cd 90 {
ha731548874 8:075a9610e2cd 91 rx_buffer[rx_buffer_ptr] = motor.getc();
ha731548874 8:075a9610e2cd 92 rx_buffer_ptr++;
ha731548874 8:075a9610e2cd 93 if(rx_buffer_ptr==6)
ha731548874 8:075a9610e2cd 94 {
ha731548874 8:075a9610e2cd 95 rx_buffer_full = true;
ha731548874 8:075a9610e2cd 96 rx_buffer_ptr=0;
ha731548874 8:075a9610e2cd 97 }
ha731548874 8:075a9610e2cd 98 }
ha731548874 8:075a9610e2cd 99 }