📄 sj.c
字号:
#include <stdio.h>#include <unistd.h>#include <sys/types.h>#include <sys/ipc.h>#include <sys/ioctl.h>#include <pthread.h>#include <fcntl.h>#include "zlg7289.h"#include "s3c44b0-spi.h"#include <string.h>#include"time.h"#include "hardware.h"//#define TC 1024#define TC 66000000/16/2/1000#define SPI_DEV "/dev/spi/0"static int spi_fd = -1;#define Zlg7289_Reset() do{write_Zlg7289(ZLG7289_CMD_RST);Delay(20);}while(0)#define ADCCON_FLAG 0x40#define ADCCON_SLEEP 0x20pthread_mutex_t lock;int x;static int stop=0;int pwminit(){ TCFG0 |=0x10; TCFG1 |=0x0; TCNTB0=TC; TCMPB0=TC/2; TCON |=0x1<<1; TCON &=(~0x1<<1); TCON |=0x19; return 0;}void setpwm(int n){ TCMPB0=TC/1024*(n-512)+TC/2;}void closepwm(){ while(TCNTO0>TCMPB0); TCON &= (~0x19) ; }void init_ADdevice(void){ ADCPSR=20; ADCCON=ADCCON_SLEEP;}int GetADresult(int i){ int j; ADCCON=i<<2|0x1; while(ADCCON&0x1); for(j=0;j<100;j++); while(!(ADCCON&0x40)); return ADCDAT;}void* comMonitor(void* data){ getchar(); stop=1; closepwm(); close(spi_fd); exit(0); return NULL;}void* com0(void* data){ int i=0; while(1) { pthread_mutex_lock(&lock); x=(int)GetADresult(1); pthread_mutex_unlock(&lock); for(i=0;i<100;i++); } return NULL;}static void Delay(int t) //LED{ int i; for(;t>0;t--) for(i=0;i<400;i++);}static void write_Zlg7289(int cmd){ spi_rw data; data.buffer=(char*)&cmd; data.size=1; if(ioctl(spi_fd, SPI_IOCTRL_WFORZLG7289, &data)!=0){ printf("Error IOCTRL, please check your spi driver in kernel!\n"); close(spi_fd); exit(1); }}static void mwrite_Zlg7289(char* buffer, int size){ spi_rw data; data.buffer=buffer; data.size=size; if(ioctl(spi_fd, SPI_IOCTRL_WFORZLG7289, &data)!=0){ printf("Error IOCTRL, please check your spi driver in kernel!\n"); close(spi_fd); exit(1); }}static void Zlg7289_showStr(int str){ int i; char buffer[20]; for(i=0;i<8 && str!=0 ;i++){ buffer[i*2]=(ZLG7289_CMD_DATA1|i); buffer[i*2+1]=(str%10); str/=10; } for(;i<8;i++){ buffer[i*2]=(ZLG7289_CMD_DATA0|i); buffer[i*2+1]=0xf; //don't show any word } mwrite_Zlg7289(buffer, 16);} int main(void){ int i,m=0; pthread_t b,a0; void * retval; pwminit(); init_ADdevice(); usleep(1); pthread_create(&b, NULL,comMonitor,0); pthread_create(&a0, NULL,com0,0); if((spi_fd=open(SPI_DEV, O_NONBLOCK))<0){ printf("Error opening %s spi device\n", SPI_DEV); return 1; } Zlg7289_Reset(); while(stop == 0) { setpwm(x); if((m-x)>2||(x-m)>2) { m=x; Zlg7289_showStr(x); } } pthread_join(b, &retval); pthread_join(a0, &retval); return 0;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -