通过gpio口串行配置a9850的信号输出频率
ad9850_wr_serial(w0写入数据, 频率(HZ));
调用格式:
1 2
| ad9850_init_serial(); ad9850_wr_serial(0x00, 10000000.0);
|
a9850.h
1 2 3 4 5 6 7 8 9 10
| #ifndef __AD9850_H__ #define __AD9850_H__
#include "headfile.h" void ad9850_init_serial(void); void ad9850_wr_serial(unsigned char w0, const double frequence);
#endif
|
a9850.C
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92
| #include "ti_msp_dl_config.h" #include "ad9850.h" #include <stdio.h>
#define ad9850_w_clk(bit) ((bit) == 0 ? DL_GPIO_clearPins(GPIOA, GPIO_AD9850_PIN_W_CLK_PIN) : DL_GPIO_setPins(GPIOA, GPIO_AD9850_PIN_W_CLK_PIN) ) #define ad9850_fq_ud(bit) ((bit) == 0 ? DL_GPIO_clearPins(GPIOB, GPIO_AD9850_PIN_FQ_UD_PIN) : DL_GPIO_setPins(GPIOB, GPIO_AD9850_PIN_FQ_UD_PIN) ) #define ad9850_rest(bit) ((bit) == 0 ? DL_GPIO_clearPins(GPIOA, GPIO_AD9850_PIN_REST_PIN) : DL_GPIO_setPins(GPIOA, GPIO_AD9850_PIN_REST_PIN) ) #define ad9850_bit_data(bit) ((bit) == 0 ? DL_GPIO_clearPins(GPIOA, GPIO_AD9850_PIN_BIT_DATA_PIN) : DL_GPIO_setPins(GPIOA, GPIO_AD9850_PIN_BIT_DATA_PIN) )
void ad9850_init_serial(void) { ad9850_w_clk(0); ad9850_fq_ud(0);
ad9850_rest(0); ad9850_rest(1); ad9850_rest(0);
ad9850_w_clk(0); ad9850_w_clk(1); ad9850_w_clk(0);
ad9850_fq_ud(0); ad9850_fq_ud(1); ad9850_fq_ud(0); }
void ad9850_wr_serial(unsigned char w0, const double frequence) { unsigned char i = 0, w = 0; long long y = 0; long double x = 0.0f; x = 4294967295.0/125.0; long double freq = frequence; freq = freq / 1000000.0 * x; y = freq; w=(y>>=0); for(i=0;i<8;i++) { uint8_t data = (w>>i)&0x01; ad9850_bit_data(data); ad9850_w_clk(1); ad9850_w_clk(0); } w=(y>>8); for(i=0;i<8;i++) { uint8_t data = (w>>i)&0x01; ad9850_bit_data(data); ad9850_w_clk(1); ad9850_w_clk(0); } w=(y>>16); for(i=0;i<8;i++) { uint8_t data = (w>>i)&0x01; ad9850_bit_data(data); ad9850_w_clk(1); ad9850_w_clk(0); } w=(y>>24); for(i=0;i<8;i++) { uint8_t data = (w>>i)&0x01; ad9850_bit_data(data); ad9850_w_clk(1); ad9850_w_clk(0);
} w=w0; for(i=0;i<8;i++) { uint8_t data = (w>>i)&0x01; ad9850_bit_data(data); ad9850_w_clk(1); ad9850_w_clk(0);
} ad9850_fq_ud(1); ad9850_fq_ud(0);
}
|