00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037 #include "somo_14d.h"
00038 #include "pic_serial.h"
00039
00040
00041 void somo_14d_setup_io() {
00042
00043 make_output(somo_14d_clk_port, somo_14d_clk_pin);
00044 set_pin(somo_14d_clk_port, somo_14d_clk_pin);
00045
00046 make_output(somo_14d_data_port, somo_14d_data_pin);
00047
00048 #ifdef somo_14d_reset_port
00049 make_output(somo_14d_reset_port, somo_14d_reset_pin);
00050 set_pin(somo_14d_reset_port, somo_14d_reset_pin);
00051 #endif
00052 #ifdef somo_14d_busy_port
00053 make_input(somo_14d_busy_port, somo_14d_busy_pin);
00054 #endif
00055 }
00056
00057 void somo_14d_reset() {
00058 #ifdef somo_14d_reset_port
00059 clear_pin(somo_14d_reset_port, somo_14d_reset_pin);
00060 delay_ms(10);
00061 set_pin(somo_14d_reset_port, somo_14d_reset_pin);
00062 #endif
00063 }
00064
00065 void somo_14d_standby() {
00066 #ifdef somo_14d_reset_port
00067 clear_pin(somo_14d_reset_port, somo_14d_reset_pin);
00068
00069
00070
00071 #endif
00072 }
00073 void somo_14d_wake() {
00074 #ifdef somo_14d_reset_port
00075 set_pin(somo_14d_reset_port, somo_14d_reset_pin);
00076 #endif
00077 }
00078
00079 void somo_14d_send_data(uns16 data) {
00080
00081
00082 clear_pin(somo_14d_clk_port, somo_14d_clk_pin);
00083 delay_ms(3);
00084
00085 for (uns8 count = 0; count < 16; count++) {
00086 if (data.15) {
00087 set_pin(somo_14d_data_port, somo_14d_data_pin);
00088 } else {
00089 clear_pin(somo_14d_data_port, somo_14d_data_pin);
00090 }
00091 delay_us(2);
00092 set_pin(somo_14d_clk_port, somo_14d_clk_pin);
00093 delay_us(220);
00094 clear_pin(somo_14d_clk_port, somo_14d_clk_pin);
00095 delay_us(220);
00096 data = data << 1;
00097 }
00098
00099 set_pin(somo_14d_clk_port, somo_14d_clk_pin);
00100 delay_ms(3);
00101 }
00102
00103 void somo_14d_set_file_id(uns16 file_id) {
00104
00105 somo_14d_send_data(file_id);
00106 }
00107
00108 void somo_14d_set_volume(uns8 level) {
00109 level = level & 0x07;
00110 somo_14d_send_data(SOMO_14D_VOLUME_CMD + level);
00111 }
00112
00113 void somo_14d_play_pause() {
00114 somo_14d_send_data(SOMO_14D_PLAY_PAUSE_CMD);
00115 }
00116
00117 void somo_14d_stop() {
00118
00119 somo_14d_send_data(SOMO_14D_STOP_CMD);
00120
00121 }
00122
00123 uns8 somo_14d_is_busy() {
00124 #ifdef somo_14d_busy_port
00125 return test_pin(somo_14d_busy_port, somo_14d_busy_pin);
00126 #else
00127 return 0;
00128 #endif
00129 }