example for for using the flir lepton on the stm32nucleo_401re
Dependencies: mbed
main.cpp@0:4065e63beba6, 2014-09-18 (annotated)
- Committer:
- pureengineering
- Date:
- Thu Sep 18 05:27:49 2014 +0000
- Revision:
- 0:4065e63beba6
- Child:
- 1:dd6a90cf2191
first pass at getting an image.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
pureengineering | 0:4065e63beba6 | 1 | #include "mbed.h" |
pureengineering | 0:4065e63beba6 | 2 | |
pureengineering | 0:4065e63beba6 | 3 | Serial pc(SERIAL_TX, SERIAL_RX); |
pureengineering | 0:4065e63beba6 | 4 | SPI lepton_spi(SPI_MOSI, SPI_MISO, SPI_SCK); |
pureengineering | 0:4065e63beba6 | 5 | DigitalOut spi_cs(SPI_CS); |
pureengineering | 0:4065e63beba6 | 6 | |
pureengineering | 0:4065e63beba6 | 7 | //DigitalOut myled(LED1); |
pureengineering | 0:4065e63beba6 | 8 | |
pureengineering | 0:4065e63beba6 | 9 | #define VOSPI_FRAME_SIZE (164) |
pureengineering | 0:4065e63beba6 | 10 | uint8_t lepton_frame_packet[VOSPI_FRAME_SIZE]; |
pureengineering | 0:4065e63beba6 | 11 | int lepton_image[80][80]; |
pureengineering | 0:4065e63beba6 | 12 | |
pureengineering | 0:4065e63beba6 | 13 | static void print_image_binary(void) |
pureengineering | 0:4065e63beba6 | 14 | { |
pureengineering | 0:4065e63beba6 | 15 | int i; |
pureengineering | 0:4065e63beba6 | 16 | int j; |
pureengineering | 0:4065e63beba6 | 17 | |
pureengineering | 0:4065e63beba6 | 18 | pc.putc(0xDE); |
pureengineering | 0:4065e63beba6 | 19 | pc.putc(0xAD); |
pureengineering | 0:4065e63beba6 | 20 | pc.putc(0xBE); |
pureengineering | 0:4065e63beba6 | 21 | pc.putc(0xEF); |
pureengineering | 0:4065e63beba6 | 22 | |
pureengineering | 0:4065e63beba6 | 23 | for(i=0;i<60;i++) |
pureengineering | 0:4065e63beba6 | 24 | { |
pureengineering | 0:4065e63beba6 | 25 | for(j=0;j<80;j++) |
pureengineering | 0:4065e63beba6 | 26 | { |
pureengineering | 0:4065e63beba6 | 27 | while(pc.writeable() == 0); |
pureengineering | 0:4065e63beba6 | 28 | pc.putc((lepton_image[i][j]>>8)&0xff); |
pureengineering | 0:4065e63beba6 | 29 | while(pc.writeable() == 0); |
pureengineering | 0:4065e63beba6 | 30 | pc.putc(lepton_image[i][j]&0xff); |
pureengineering | 0:4065e63beba6 | 31 | wait_us(1); |
pureengineering | 0:4065e63beba6 | 32 | } |
pureengineering | 0:4065e63beba6 | 33 | } |
pureengineering | 0:4065e63beba6 | 34 | } |
pureengineering | 0:4065e63beba6 | 35 | |
pureengineering | 0:4065e63beba6 | 36 | int lost_frame_counter = 0; |
pureengineering | 0:4065e63beba6 | 37 | |
pureengineering | 0:4065e63beba6 | 38 | int last_frame_number; |
pureengineering | 0:4065e63beba6 | 39 | int frame_complete = 0; |
pureengineering | 0:4065e63beba6 | 40 | int start_image = 0; |
pureengineering | 0:4065e63beba6 | 41 | int need_resync = 0; |
pureengineering | 0:4065e63beba6 | 42 | int last_crc; |
pureengineering | 0:4065e63beba6 | 43 | int new_frame = 0; |
pureengineering | 0:4065e63beba6 | 44 | int frame_counter = 0; |
pureengineering | 0:4065e63beba6 | 45 | |
pureengineering | 0:4065e63beba6 | 46 | void transfer(void) |
pureengineering | 0:4065e63beba6 | 47 | { |
pureengineering | 0:4065e63beba6 | 48 | int i; |
pureengineering | 0:4065e63beba6 | 49 | int frame_number; |
pureengineering | 0:4065e63beba6 | 50 | |
pureengineering | 0:4065e63beba6 | 51 | |
pureengineering | 0:4065e63beba6 | 52 | spi_cs = 0; |
pureengineering | 0:4065e63beba6 | 53 | for(i=0;i<VOSPI_FRAME_SIZE;i++) |
pureengineering | 0:4065e63beba6 | 54 | { |
pureengineering | 0:4065e63beba6 | 55 | lepton_frame_packet[i] = lepton_spi.write(0x55); |
pureengineering | 0:4065e63beba6 | 56 | } |
pureengineering | 0:4065e63beba6 | 57 | spi_cs = 1; |
pureengineering | 0:4065e63beba6 | 58 | |
pureengineering | 0:4065e63beba6 | 59 | //pc.printf("%x %x \n\r",lepton_frame_packet[0], lepton_frame_packet[1]); |
pureengineering | 0:4065e63beba6 | 60 | |
pureengineering | 0:4065e63beba6 | 61 | //for(i=0;i<VOSPI_FRAME_SIZE;i++) |
pureengineering | 0:4065e63beba6 | 62 | //{ |
pureengineering | 0:4065e63beba6 | 63 | // pc.printf("%x,",lepton_frame_packet[i]); |
pureengineering | 0:4065e63beba6 | 64 | // } |
pureengineering | 0:4065e63beba6 | 65 | //pc.printf("\n\r"); |
pureengineering | 0:4065e63beba6 | 66 | |
pureengineering | 0:4065e63beba6 | 67 | if(((lepton_frame_packet[0]&0xf) != 0x0f)) |
pureengineering | 0:4065e63beba6 | 68 | { |
pureengineering | 0:4065e63beba6 | 69 | if(lepton_frame_packet[1] == 0 ) |
pureengineering | 0:4065e63beba6 | 70 | { |
pureengineering | 0:4065e63beba6 | 71 | if(last_crc != (lepton_frame_packet[3]<<8 | lepton_frame_packet[4])) |
pureengineering | 0:4065e63beba6 | 72 | { |
pureengineering | 0:4065e63beba6 | 73 | new_frame = 1; |
pureengineering | 0:4065e63beba6 | 74 | } |
pureengineering | 0:4065e63beba6 | 75 | last_crc = lepton_frame_packet[3]<<8 | lepton_frame_packet[4]; |
pureengineering | 0:4065e63beba6 | 76 | } |
pureengineering | 0:4065e63beba6 | 77 | frame_number = lepton_frame_packet[1]; |
pureengineering | 0:4065e63beba6 | 78 | if( (frame_number>0) && (frame_number<60)) |
pureengineering | 0:4065e63beba6 | 79 | { |
pureengineering | 0:4065e63beba6 | 80 | pc.printf("%d\n\r",frame_number); |
pureengineering | 0:4065e63beba6 | 81 | } |
pureengineering | 0:4065e63beba6 | 82 | |
pureengineering | 0:4065e63beba6 | 83 | if(frame_number < 60 ) |
pureengineering | 0:4065e63beba6 | 84 | { |
pureengineering | 0:4065e63beba6 | 85 | lost_frame_counter = 0; |
pureengineering | 0:4065e63beba6 | 86 | for(i=0;i<80;i++) |
pureengineering | 0:4065e63beba6 | 87 | { |
pureengineering | 0:4065e63beba6 | 88 | lepton_image[frame_number][i] = (lepton_frame_packet[2*i+4] << 8 | lepton_frame_packet[2*i+5]); |
pureengineering | 0:4065e63beba6 | 89 | } |
pureengineering | 0:4065e63beba6 | 90 | } |
pureengineering | 0:4065e63beba6 | 91 | if( frame_number == 59) |
pureengineering | 0:4065e63beba6 | 92 | { |
pureengineering | 0:4065e63beba6 | 93 | frame_complete = 1; |
pureengineering | 0:4065e63beba6 | 94 | last_frame_number = 0; |
pureengineering | 0:4065e63beba6 | 95 | } |
pureengineering | 0:4065e63beba6 | 96 | } |
pureengineering | 0:4065e63beba6 | 97 | else |
pureengineering | 0:4065e63beba6 | 98 | { |
pureengineering | 0:4065e63beba6 | 99 | wait_us(10); |
pureengineering | 0:4065e63beba6 | 100 | } |
pureengineering | 0:4065e63beba6 | 101 | |
pureengineering | 0:4065e63beba6 | 102 | lost_frame_counter++; |
pureengineering | 0:4065e63beba6 | 103 | if(lost_frame_counter>1000) |
pureengineering | 0:4065e63beba6 | 104 | { |
pureengineering | 0:4065e63beba6 | 105 | need_resync = 1; |
pureengineering | 0:4065e63beba6 | 106 | lost_frame_counter = 0; |
pureengineering | 0:4065e63beba6 | 107 | |
pureengineering | 0:4065e63beba6 | 108 | } |
pureengineering | 0:4065e63beba6 | 109 | |
pureengineering | 0:4065e63beba6 | 110 | if(need_resync) |
pureengineering | 0:4065e63beba6 | 111 | { |
pureengineering | 0:4065e63beba6 | 112 | pc.printf("resync\n\r"); |
pureengineering | 0:4065e63beba6 | 113 | wait_us(185); |
pureengineering | 0:4065e63beba6 | 114 | need_resync = 0; |
pureengineering | 0:4065e63beba6 | 115 | } |
pureengineering | 0:4065e63beba6 | 116 | |
pureengineering | 0:4065e63beba6 | 117 | |
pureengineering | 0:4065e63beba6 | 118 | if(frame_complete) |
pureengineering | 0:4065e63beba6 | 119 | { |
pureengineering | 0:4065e63beba6 | 120 | if(new_frame) |
pureengineering | 0:4065e63beba6 | 121 | { |
pureengineering | 0:4065e63beba6 | 122 | frame_counter++; |
pureengineering | 0:4065e63beba6 | 123 | { |
pureengineering | 0:4065e63beba6 | 124 | if(frame_counter%9 ==0) |
pureengineering | 0:4065e63beba6 | 125 | { |
pureengineering | 0:4065e63beba6 | 126 | //print_image_binary(); |
pureengineering | 0:4065e63beba6 | 127 | } |
pureengineering | 0:4065e63beba6 | 128 | pc.printf("print_image_binary\n\r"); |
pureengineering | 0:4065e63beba6 | 129 | } |
pureengineering | 0:4065e63beba6 | 130 | new_frame = 0; |
pureengineering | 0:4065e63beba6 | 131 | } |
pureengineering | 0:4065e63beba6 | 132 | |
pureengineering | 0:4065e63beba6 | 133 | frame_complete = 0; |
pureengineering | 0:4065e63beba6 | 134 | } |
pureengineering | 0:4065e63beba6 | 135 | } |
pureengineering | 0:4065e63beba6 | 136 | |
pureengineering | 0:4065e63beba6 | 137 | |
pureengineering | 0:4065e63beba6 | 138 | int main() |
pureengineering | 0:4065e63beba6 | 139 | { |
pureengineering | 0:4065e63beba6 | 140 | |
pureengineering | 0:4065e63beba6 | 141 | //pc.baud(9600); |
pureengineering | 0:4065e63beba6 | 142 | pc.baud(115200); |
pureengineering | 0:4065e63beba6 | 143 | //pc.baud(1000000); |
pureengineering | 0:4065e63beba6 | 144 | pc.printf("Hello World !\n"); |
pureengineering | 0:4065e63beba6 | 145 | lepton_spi.format(8,3); |
pureengineering | 0:4065e63beba6 | 146 | lepton_spi.frequency(20000000); |
pureengineering | 0:4065e63beba6 | 147 | spi_cs = 1; |
pureengineering | 0:4065e63beba6 | 148 | |
pureengineering | 0:4065e63beba6 | 149 | wait_us(185); |
pureengineering | 0:4065e63beba6 | 150 | |
pureengineering | 0:4065e63beba6 | 151 | while(1) |
pureengineering | 0:4065e63beba6 | 152 | { |
pureengineering | 0:4065e63beba6 | 153 | //myled = !myled; |
pureengineering | 0:4065e63beba6 | 154 | transfer(); |
pureengineering | 0:4065e63beba6 | 155 | } |
pureengineering | 0:4065e63beba6 | 156 | } |
pureengineering | 0:4065e63beba6 | 157 |