Advertisement
olcayertas

HCS12 Micro Controler on Dragon training board

Jul 3rd, 2012
434
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 6.64 KB | None | 0 0
  1. #include <hidef.h>      /* common defines and macros */
  2. #include "derivative.h"     /* derivative-specific definitions */
  3. #include <mc9s12dp256.h>
  4. #include <stdio.h>
  5. #include <stdlib.h>
  6.  
  7. #define GEN_VERSION 0x11
  8. #define CAMERABUFFSIZ 100
  9. #define STOPCURRENTFRAME 0x0
  10. #define FBUF_CTRL 0x36
  11. #define WRITE_DATA 0x31
  12. #define READ_DATA 0x30
  13. #define GET_FBUF_LEN 0x34
  14. #define Size_640x480 0x00
  15. #define Size_320x240 0x11
  16. #define Size_160x120 0x22
  17. #define RESET  0x26
  18. #define CAMERADELAY 10
  19. #define READ_FBUF 0x32
  20. #define STOP_FRAME 0x36
  21.  
  22. #define BAUD_RATE_9600_1 0xAE
  23. #define BAUD_RATE_9600_2 0xC8
  24. #define BAUD_RATE_CMD 0x24
  25.  
  26.  
  27. unsigned char* getVersion(void);
  28. int setImageSize(void);
  29. void sendCommand(unsigned char cmd, unsigned char args[], unsigned char argn);
  30. unsigned char readResponse(unsigned char numbytes);
  31. int runCommand(unsigned char, unsigned char *, unsigned char,unsigned char, int);
  32. int verifyResponse(unsigned char );
  33. int takePicture(void);
  34. int cameraFrameBuffCtrl(unsigned char );
  35. int reset(void);
  36. unsigned int frameLength(void);
  37. unsigned char getImageSize(void);
  38. unsigned char* readPicture(unsigned char );
  39. unsigned int setBaudRate(void);
  40. int setCompression(unsigned char);
  41. unsigned char getCompression(void);
  42. unsigned int stopFrame(void);
  43. void delay(int);
  44. void sciWrite(char);
  45. void sciWrites(char temp[]);
  46. int check(char*,int);
  47.  
  48. unsigned char camerabuff[CAMERABUFFSIZ+1];
  49. int bufferLen=0;
  50. unsigned char serialNum =0;
  51. unsigned int frameptr=0;
  52. float testSize;
  53.  
  54. void main(void) {
  55.     unsigned int count;
  56.     unsigned int frameSize;
  57.     unsigned char temp[20];
  58.     unsigned int bytesToRead;
  59.     int i=0;.
  60.     unsigned char *buf;
  61.     unsigned char compression=0;
  62.     DDRH=0x00;  //PortH input
  63.     DDRB=0xFF;  //PORTB output
  64.     PORTB = 0;
  65.  
  66.     SCI1BDH=0;
  67.     SCI1BDL=156;    //baud rate set.
  68.     SCI1CR1=0X00;
  69.     SCI1CR2=0X0C;   //Transimit & Receiver enable
  70.     SCI0BDH=0;
  71.     SCI0BDL=156
  72.     SCI0CR1=0X00;
  73.     SCI0CR2=0X08;
  74.  
  75.     PORTB=0;
  76.     while((PTH&0x01)!=1);
  77.     count = reset();  
  78.     delay(4000);
  79.     count = setBaudRate();
  80.  
  81.     SCI1BDH=0;
  82.     SCI1BDL=156;
  83.     SCI1CR1=0X00;
  84.     SCI1CR2=0X0C;  
  85.  
  86.     count=setImageSize();
  87.     compression=0xFA;
  88.     count=setCompression(compression);
  89.     buf = getVersion();
  90.     count=getImageSize();
  91.     count=takePicture();     
  92.     count=frameLength();
  93.     frameSize =camerabuff[7]*256+camerabuff[8];
  94.  
  95.     while(frameSize > 0 ) {
  96.       int index,i;
  97.       unsigned char *buffer;
  98.       bytesToRead = frameSize<32?frameSize:32;
  99.       buffer = readPicture(bytesToRead);
  100.       sciWrites(buffer);  
  101.       frameSize -= bytesToRead;
  102.     }
  103.  
  104.     count=stopFrame();
  105.     return ;      
  106. }
  107.  
  108. int check(char *buffer,int bytesToRead){
  109.   int i;
  110.  
  111.   for(i=0; i<100;++i) {
  112.     if((buffer[i]==0xFF)&&(buffer[i+1]=0xDA)) {  
  113.       return i+1;
  114.     }
  115.   }
  116.  
  117.   return -1;
  118. }
  119.  
  120. int reset(void) {
  121.   unsigned char args[] = {0x0};
  122.   return runCommand(RESET, args, 1, 5,0);
  123. }
  124.  
  125. int takePicture(void) {
  126.   frameptr = 0;
  127.   return cameraFrameBuffCtrl(STOPCURRENTFRAME);
  128. }
  129.  
  130. unsigned int frameLength(void) {
  131.   unsigned int len=0;
  132.   unsigned char args[] = {0x01, 0x00};
  133.    
  134.   if (!runCommand(GET_FBUF_LEN, args, sizeof(args), 9,0))
  135.     return 0 ;
  136.  
  137.   len = camerabuff[5];
  138.   len <<= 8;
  139.   len |= camerabuff[6];
  140.   len <<= 8;
  141.   len |= camerabuff[7];
  142.   len <<= 8;
  143.   len |= camerabuff[8];
  144.  
  145.   return len;
  146. }
  147.  
  148. int cameraFrameBuffCtrl(unsigned char command) {
  149.   unsigned char args[2];
  150.   args[0]=0x1;
  151.   args[1]=command;
  152.   return runCommand(FBUF_CTRL, args, sizeof(args), 5,0);
  153. }
  154.  
  155. unsigned char* getVersion(void){
  156.   unsigned char args[]={0x01};
  157.   sendCommand( GEN_VERSION, args, 1 );
  158.  
  159.   if(!readResponse( 100 ))
  160.     return NULL;
  161.  
  162.   camerabuff[bufferLen]=0;
  163.   return camerabuff;
  164. }
  165.  
  166. int setImageSize(void) {
  167.   unsigned char args[]={ 0x05, 0x04, 0x01, 0x00, 0x19, Size_160x120};
  168.   return runCommand( WRITE_DATA, args, sizeof(args), 5,0);
  169. }
  170.  
  171. int setCompression(unsigned char c){
  172.   unsigned char args[6];
  173.   args[0]=0x5;
  174.   args[1]=0x1;
  175.   args[2]=0x1;
  176.   args[3]=0x12;
  177.   args[4]=0x04;
  178.   args[5]=c;
  179.   return runCommand(WRITE_DATA,args,sizeof(args),5,0);
  180. }
  181.  
  182. unsigned char getCompression(void) {
  183.   unsigned char args[] = {0x4, 0x1, 0x1, 0x12, 0x04};
  184.   runCommand(READ_DATA, args, sizeof(args), 6,0);
  185.   return camerabuff[5];
  186. }
  187.  
  188. unsigned char getImageSize() {
  189.   unsigned char args[] = {0x4, 0x4, 0x1, 0x00, 0x19};
  190.  
  191.   if (! runCommand(READ_DATA, args, sizeof(args), 6,0))
  192.     return -1;
  193.   return camerabuff[5];
  194. }
  195.  
  196. unsigned char* readPicture(unsigned char n) {
  197.   unsigned char args[13];
  198.   args[0]=0x0C;
  199.   args[1]=0x0;
  200.   args[2]=0x0A;
  201.   args[3]=0;
  202.   args[4]=0;
  203.   args[5]=frameptr>>8;
  204.   args[6]=frameptr&0xFF;
  205.   args[7]=0;
  206.   args[8]=0;
  207.   args[9]=0;
  208.   args[10]=n;
  209.   args[11]=CAMERADELAY>>8;
  210.   args[12]=CAMERADELAY>>8;                    
  211.   //args[11]=0;
  212.   //args[12]=10;
  213.  
  214.   if (!runCommand(READ_FBUF, args, sizeof(args), 5, 0))
  215.     return 0;
  216.  
  217.   if (readResponse(n+5) == 0)
  218.       return 0;
  219.  
  220.   frameptr += n;
  221.   return camerabuff;
  222. }
  223.  
  224. unsigned int setBaudRate(void){
  225.   unsigned char args[]={0x03,0x01,BAUD_RATE_9600_1,BAUD_RATE_9600_2};
  226.   return runCommand(BAUD_RATE_CMD,args,sizeof(args),5,0 );
  227. }
  228.  
  229. unsigned int stopFrame(void) {
  230.   unsigned char args[]={0x01,0x03};
  231.   return runCommand(STOP_FRAME,args,sizeof(args),5,0);
  232. }
  233.  
  234. int runCommand(unsigned char cmd, unsigned char *args, unsigned char argn,
  235.     unsigned char resplen, int flushflag){
  236.     if(flushflag)
  237.       readResponse(100);
  238.    
  239.     sendCommand(cmd,args,argn);
  240.    
  241.     if(readResponse(resplen) !=resplen )
  242.       return 0;
  243.  
  244.     if( !verifyResponse(cmd))
  245.       return 0;
  246.        
  247.     return 1;        
  248. }
  249.  
  250. void sendCommand(unsigned char cmd, unsigned char args[], unsigned char argn){
  251.   int i ;
  252.   SCI1DRL = 0x56;
  253.   while((SCI1SR1&0X80)==0);
  254.   SCI1DRL = serialNum;
  255.   while((SCI1SR1&0X80)==0);
  256.   SCI1DRL = cmd;
  257.   while((SCI1SR1&0X80)==0);
  258.  
  259.   for(i=0; i< argn ;++i) {
  260.     SCI1DRL = args[i];
  261.     while((SCI1SR1&0X80)==0);
  262.   }
  263.  
  264.   return;
  265. }
  266.  
  267. unsigned char readResponse(unsigned char numbytes){
  268.   unsigned char counter=0;
  269.   bufferLen=0;
  270.  
  271.   while(bufferLen!=numbytes) {
  272.     while((SCI1SR1 & 0x20 )==0);     
  273.       camerabuff[bufferLen++]=SCI1DRL;
  274.   }
  275.  
  276.   return bufferLen;
  277. }
  278.  
  279. int verifyResponse(unsigned char command) {
  280.   if ((camerabuff[0] != 0x76) ||
  281.       (camerabuff[1] != serialNum) ||
  282.       (camerabuff[2] != command) ||
  283.       (camerabuff[3] != 0x0))
  284.       return 0;
  285.   return 1;
  286. }
  287.  
  288. void sciWrites(char temp[]){
  289.   int i;
  290.  
  291.   for(i=0; temp[i]!='\0';++i)
  292.     sciWrite(temp[i]);
  293. }
  294.  
  295. void sciWrite(char temp){
  296.   SCI0DRL=temp;
  297.   while((SCI0SR1&0X80)==0);
  298. }
  299.  
  300. void delay(int num) {
  301.   volatile unsigned short i;
  302.  
  303.   while(num>0) {
  304.     i= 2000;
  305.    
  306.     while(i>0){
  307.       i=i-1;
  308.     }
  309.     num=num-1;
  310.   }
  311. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement