.
Dependencies: L432KC_SPI_Pey_Lal
main.cpp@112:478ae92cb106, 2022-04-26 (annotated)
- Committer:
- voltxd
- Date:
- Tue Apr 26 11:11:49 2022 +0000
- Revision:
- 112:478ae92cb106
- Parent:
- 111:f11575e7c79b
- Child:
- 113:2f8f255e99f2
.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
mbed_official | 82:abf1b1785bd7 | 1 | /* mbed Microcontroller Library |
mbed_official | 102:6979ad8bc0bc | 2 | * Copyright (c) 2019 ARM Limited |
mbed_official | 82:abf1b1785bd7 | 3 | * SPDX-License-Identifier: Apache-2.0 |
mbed_official | 82:abf1b1785bd7 | 4 | */ |
mbed_official | 82:abf1b1785bd7 | 5 | |
Jonathan Austin |
0:2757d7abb7d9 | 6 | #include "mbed.h" |
mbed_official | 100:ec006d6f3cb6 | 7 | #include "platform/mbed_thread.h" |
voltxd | 109:4ee7ffc8f175 | 8 | #include "protocol.h" |
Jonathan Austin |
0:2757d7abb7d9 | 9 | |
voltxd | 108:2fd41d299a8c | 10 | //Define SPI |
voltxd | 108:2fd41d299a8c | 11 | #define SPI3_MOSI D11 |
voltxd | 108:2fd41d299a8c | 12 | #define SPI3_MISO D12 |
voltxd | 108:2fd41d299a8c | 13 | #define SPI3_SCLK D13 |
voltxd | 108:2fd41d299a8c | 14 | #define SPI3_CS A3 |
ajuton | 107:0965c72c798e | 15 | |
voltxd | 108:2fd41d299a8c | 16 | //Define PWM |
voltxd | 112:478ae92cb106 | 17 | #define PWM_PROP D9 |
voltxd | 112:478ae92cb106 | 18 | #define PWM_DIR D10 |
voltxd | 112:478ae92cb106 | 19 | |
voltxd | 112:478ae92cb106 | 20 | //fontion interrupt SP |
voltxd | 112:478ae92cb106 | 21 | void onRxInterrupt(); |
ajuton | 107:0965c72c798e | 22 | |
voltxd | 111:f11575e7c79b | 23 | //Declaration PWM outputs |
voltxd | 108:2fd41d299a8c | 24 | PwmOut propulsion(PWM_PROP); |
voltxd | 108:2fd41d299a8c | 25 | PwmOut direction(PWM_DIR); |
ajuton | 107:0965c72c798e | 26 | |
voltxd | 111:f11575e7c79b | 27 | //Declaration Links |
voltxd | 112:478ae92cb106 | 28 | static UnbufferedSerial serial_port(USBTX, USBRX,115200); |
voltxd | 108:2fd41d299a8c | 29 | SPISlave device(SPI3_MOSI, SPI3_MISO, SPI3_SCLK, SPI3_CS); // mosi, miso, sclk, ssel |
mbed_official | 102:6979ad8bc0bc | 30 | |
mbed_official | 82:abf1b1785bd7 | 31 | int main() |
mbed_official | 82:abf1b1785bd7 | 32 | { |
voltxd | 111:f11575e7c79b | 33 | //Declaration PWM variables |
ajuton | 107:0965c72c798e | 34 | uint32_t pulsewidth_direction = 1100; |
voltxd | 109:4ee7ffc8f175 | 35 | uint32_t pulsewidth_propulsion = 1500; |
voltxd | 109:4ee7ffc8f175 | 36 | |
voltxd | 111:f11575e7c79b | 37 | //Test Serial port |
voltxd | 111:f11575e7c79b | 38 | serial_port.write("Test\n\r",strlen("Test\n\r")); |
voltxd | 109:4ee7ffc8f175 | 39 | |
voltxd | 112:478ae92cb106 | 40 | //Interrupt SP |
voltxd | 112:478ae92cb106 | 41 | serial_port.attach(&onRxInterrupt, SerialBase::RxIrq); |
voltxd | 112:478ae92cb106 | 42 | |
voltxd | 111:f11575e7c79b | 43 | //Init. propulsion PWM |
ajuton | 107:0965c72c798e | 44 | propulsion.period_us(20000); |
voltxd | 109:4ee7ffc8f175 | 45 | propulsion.pulsewidth_us(pulsewidth_propulsion); |
voltxd | 109:4ee7ffc8f175 | 46 | |
voltxd | 108:2fd41d299a8c | 47 | thread_sleep_for(2000); |
voltxd | 109:4ee7ffc8f175 | 48 | |
voltxd | 111:f11575e7c79b | 49 | //Init. Direction PWM |
ajuton | 107:0965c72c798e | 50 | direction.period_us(20000); |
ajuton | 107:0965c72c798e | 51 | direction.pulsewidth_us(pulsewidth_direction); |
voltxd | 109:4ee7ffc8f175 | 52 | |
voltxd | 111:f11575e7c79b | 53 | //Init. SPI Link |
voltxd | 108:2fd41d299a8c | 54 | device.format(8); |
voltxd | 108:2fd41d299a8c | 55 | |
voltxd | 111:f11575e7c79b | 56 | //Infinite loop |
voltxd | 111:f11575e7c79b | 57 | while(1) |
voltxd | 111:f11575e7c79b | 58 | { |
voltxd | 111:f11575e7c79b | 59 | //If SPI received a char, decode it then reply bullshit. |
voltxd | 110:a6d1d3525014 | 60 | if(device.receive()) |
voltxd | 109:4ee7ffc8f175 | 61 | { |
voltxd | 112:478ae92cb106 | 62 | char c = device.read(); |
voltxd | 112:478ae92cb106 | 63 | decodeMessage(c); |
voltxd | 112:478ae92cb106 | 64 | serial_port.write(&c, 1); |
voltxd | 111:f11575e7c79b | 65 | device.reply(0b10101010); |
voltxd | 109:4ee7ffc8f175 | 66 | } |
voltxd | 111:f11575e7c79b | 67 | |
voltxd | 111:f11575e7c79b | 68 | //If decoding has ended, get and changes PWM values. |
voltxd | 110:a6d1d3525014 | 69 | if(isDataAvailable()) |
voltxd | 109:4ee7ffc8f175 | 70 | { |
voltxd | 110:a6d1d3525014 | 71 | getVerifiedPWMValues(&pulsewidth_propulsion, &pulsewidth_direction); |
voltxd | 109:4ee7ffc8f175 | 72 | propulsion.pulsewidth_us(pulsewidth_propulsion); |
voltxd | 109:4ee7ffc8f175 | 73 | direction.pulsewidth_us(pulsewidth_direction); |
voltxd | 111:f11575e7c79b | 74 | } |
voltxd | 112:478ae92cb106 | 75 | |
Jonathan Austin |
0:2757d7abb7d9 | 76 | } |
Jonathan Austin |
0:2757d7abb7d9 | 77 | } |
voltxd | 112:478ae92cb106 | 78 | |
voltxd | 112:478ae92cb106 | 79 | void onRxInterrupt() |
voltxd | 112:478ae92cb106 | 80 | { |
voltxd | 112:478ae92cb106 | 81 | char c; |
voltxd | 112:478ae92cb106 | 82 | |
voltxd | 112:478ae92cb106 | 83 | |
voltxd | 112:478ae92cb106 | 84 | // Read the data to clear the receive interrupt. |
voltxd | 112:478ae92cb106 | 85 | if (serial_port.read(&c, 1)) { |
voltxd | 112:478ae92cb106 | 86 | decodeMessage(c); |
voltxd | 112:478ae92cb106 | 87 | serial_port.write(&c, 1); |
voltxd | 112:478ae92cb106 | 88 | } |
voltxd | 112:478ae92cb106 | 89 | |
voltxd | 112:478ae92cb106 | 90 | } |