example for for using the flir lepton on the stm32nucleo_401re

Dependencies:   mbed

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?

UserRevisionLine numberNew 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