| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319 |
- /*
- * File: CH455.c
- * Author: JiangXiaowei
- */
-
- #include "ch455g.h" // 修改该文件以适应硬件环境/单片机型号等
- #include "delay.h"
- #include "../globalDef.h"
- #include "uart_conf.h"
- //定义
- #define I2C_DELAY 10
- #define CH455H_LED_NUM 16
- uint32_t ch455h_Time_duty[CH455H_LED_NUM]; //占空比
- uint8_t ch455h_Time_en[CH455H_LED_NUM]; //使能
- uint8_t ch455h_Time_en_process; //全局使能
- extern OS_SEM i2c_sem;
- static uint16_t CH455H_LED_VALUE=0x0000;
- void CH455_Init(void)
- {
-
-
- GPIO_InitTypeDef GPIO_InitStructure;
-
- //return;
-
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);//使能GPIOB时钟
-
-
- //stm32f103中PB3、PB4、PA15为JTAG引脚,若要作为普通IO口来使用的话,要禁用JTAG功能。
- //RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
- //GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);
-
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10|GPIO_Pin_11;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;//普通输出模式
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//100MHz
- GPIO_Init(GPIOB, &GPIO_InitStructure);
-
- GPIO_SetBits(GPIOB,GPIO_Pin_10|GPIO_Pin_11);
-
- CH455_Write( CH455_7SEG_ON ); //八段式
-
- //EXTI_MY_INIT();
-
- }
- void CH455H_SCL_D_OUT(void)
- {
- GPIO_InitTypeDef GPIO_InitStructure;
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD;//普通输出模式
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//100MHz
- GPIO_Init(GPIOB, &GPIO_InitStructure);
- delay_us(I2C_DELAY);
- }
- void CH455H_SDA_D_OUT(void)
- {
- GPIO_InitTypeDef GPIO_InitStructure;
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD;//普通输出模式
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//100MHz
- GPIO_Init(GPIOB, &GPIO_InitStructure);
- delay_us(I2C_DELAY);
- }
- void CH455H_SDA_D_IN(void)
- {
- GPIO_InitTypeDef GPIO_InitStructure;
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //设置成上拉输入
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//100MHz
- GPIO_Init(GPIOB, &GPIO_InitStructure);
- delay_us(I2C_DELAY);
- }
- /*
- * 函数功能:IIC产生起始信号函数
- * 输入参数:无
- * 输出参数:无
- */
- void CH455_I2c_Start(void)
- {
- CH455_SDA_D_OUT;
- CH455_SCL_D_OUT;
- CH455_SCL = high; //SCL = high;
- //GPIO_SetBits(GPIOB,GPIO_Pin_7);
-
- delay_us(I2C_DELAY);
- CH455_SDA = high; //SDA = high;
- delay_us(I2C_DELAY);
- CH455_SDA = low; //SDA = low;
- delay_us(I2C_DELAY);
- CH455_SCL = low; //SCL = low;
- //GPIO_ResetBits(GPIOB,GPIO_Pin_7);
-
- delay_us(I2C_DELAY);
- }
-
- /*
- * 函数功能:IIC产生停止信号
- * 输入参数:无
- * 输出参数:无
- */
- void CH455_I2c_Stop(void)
- {
- CH455_SDA_D_OUT;
- CH455_SCL = low; //SCL = low;
- delay_us(I2C_DELAY);
- CH455_SDA = low; //SDA = low;
- delay_us(I2C_DELAY);
- CH455_SCL = high; //SCL = high;
- delay_us(I2C_DELAY);
- CH455_SDA = high; //SDA = high;
- delay_us(I2C_DELAY);
- }
- /*
- * 函数功能:IIC发送一个字节
- * 输入参数:一个字节
- * 输出参数:无
- */
- void CH455_I2c_WrByte(unsigned char IIC_Byte)
- {
- unsigned char i;
- CH455_SDA_D_OUT;
- for(i = 0; i < 8; i++)
- {
- if(IIC_Byte & 0x80)
- CH455_SDA = high; //SDA=high;
- else
- CH455_SDA = low; //SDA=low;
- delay_us(I2C_DELAY);
- CH455_SCL = high; //SCL=high;
- delay_us(I2C_DELAY);
- delay_us(I2C_DELAY);
- CH455_SCL = low; //SCL=low;
- delay_us(I2C_DELAY);
- IIC_Byte<<=1;
- }
- delay_us(I2C_DELAY);
- CH455_SDA = high; //SDA=1;
-
- delay_us(I2C_DELAY);
- CH455_SCL = high; //SCL=1;
-
- delay_us(I2C_DELAY);
- CH455_SCL = low; //SCL=0;
-
- delay_us(I2C_DELAY);
- }
- unsigned char CH455_I2c_RdByte( void ) //读一个字节数据
- {
- unsigned char i, bytedata;
- CH455_SDA_D_IN; //将数据设置为输入模式
- delay_us(I2C_DELAY);
- CH455_SDA = 1; //数据线拉高
- delay_us(I2C_DELAY);
- CH455_SCL = 0;
- delay_us(I2C_DELAY);
- for(i = 0; i < 8; i++) //读8位数据
- {
- CH455_SCL = 1;
- delay_us(I2C_DELAY);
- bytedata <<= 1;
- delay_us(I2C_DELAY);
- bytedata |= (CH455_SDA_IN);
- delay_us(I2C_DELAY);
- CH455_SCL = 0;
- delay_us(I2C_DELAY);
- }
- CH455_SDA_D_OUT; //数据线设置回输出模式
- CH455_SDA = high; //SDA=1;
- delay_us(I2C_DELAY);
- CH455_SCL = high; //SCL=1;
- delay_us(I2C_DELAY);
- CH455_SCL = low; //SCL=0;
- delay_us(I2C_DELAY);
- return(bytedata);//返回数据
- }
-
- void CH455_Write( UINT16 cmd ) //写命令
- {
- CH455_I2c_Start(); //启动总线
- CH455_I2c_WrByte(((UINT8)(cmd>>7)&CH455_I2C_MASK)|CH455_I2C_ADDR);
- //CH455_I2c_WrByte(((UINT8)(cmd)&CH455_I2C_MASK)|CH455_I2C_ADDR);
- CH455_I2c_WrByte((UINT8)cmd); //发送数据
- CH455_I2c_Stop(); //结束总线
- }
-
- UINT8 CH455_Read( void ) //读取按键
- {
- UINT8 keycode;
- CH455_I2c_Start(); //启动总线
- CH455_I2c_WrByte(((UINT8)(CH455_GET_KEY>>7)&CH455_I2C_MASK)|0x01|CH455_I2C_ADDR);
- keycode=CH455_I2c_RdByte(); //读取数据
- CH455_I2c_Stop(); //结束总线
- return keycode;
- }
- void CH455H_LED_test(void){
- static uint16_t led=0;
- CH455_Write( CH455_DIG0 | ((led>>0) & 0x0F));
- CH455_Write( CH455_DIG1 | ((led>>4) & 0x0F));
- CH455_Write( CH455_DIG2 | ((led>>8) & 0x0F));
- CH455_Write( CH455_DIG3 | ((led>>12) & 0x0F));
- led++;
- }
- /*-----------------------------------------------------------
- * 16 12 8 4
- * 15 11 7 3
- * 14 10 6 2
- * 13 9 5 1
- *------------------------------------------------------------*/
- void CH455H_LED_test00(short led){
- //static uint16_t led=0;
-
- OS_ERR err;
-
- OSSemPend(&i2c_sem, 0, OS_OPT_PEND_BLOCKING, NULL, &err);
- led = (((led & 0xaaaa) >> 1) | ((led & 0x5555) << 1));
- led = (((led & 0xcccc) >> 2) | ((led & 0x3333) << 2));
- led = (((led & 0xf0f0) >> 4) | ((led & 0x0f0f) << 4));
- led = (((led & 0xff00) >> 8) | ((led & 0x00ff) << 8));
-
- CH455_Write( CH455_DIG0 | ((led>>0) & 0x0F));
- CH455_Write( CH455_DIG1 | ((led>>4) & 0x0F));
- CH455_Write( CH455_DIG2 | ((led>>8) & 0x0F));
- CH455_Write( CH455_DIG3 | ((led>>12) & 0x0F));
- //led++;
- OSSemPost(&i2c_sem, OS_OPT_POST_ALL, &err);
- }
- void CH455H_LED_test2(void){
- static uint16_t led=0;
- CH455_Write( CH455_DIG0 | ((led>>0) & 0x0F));
- CH455_Write( CH455_DIG1 | ((led>>4) & 0x0F));
- CH455_Write( CH455_DIG2 | ((led>>8) & 0x0F));
- CH455_Write( CH455_DIG3 | ((led>>12) & 0x0F));
- led=~led;
- }
- void CH455H_LED_test3(void){
- static uint16_t led=0;
- CH455_Write( CH455_DIG0 | ((led>>0) & 0x0F));
- led++;
- led&=0x000F;
- }
- extern PtTest g_ptTest;
- /*--------------------------------------------------
- * 上电显示版本号 持续显示0.5s
- * -------------------------------------------------*/
- void led_display_version(void){
- if(g_ptTest.bTestStart == 1) return;
- CH455H_LED_test00(g_firmwareMsg.gatewayMsg.verMsg.gate_appVr);
- delay_ms(1500);
- CH455H_LED_test00(0);
- delay_ms(1500);
- }
- void set_led_status(uint8_t index,uint8_t status)
- {
- //return;
- if(g_ptTest.bTestStart == 1) return;
- switch(index){
- case 0 :g_ledStatus.led16.led.led01 = status; break;
- case 1 :g_ledStatus.led16.led.led02 = status; break;
- case 2 :g_ledStatus.led16.led.led03 = status; break;
- case 3 :g_ledStatus.led16.led.led04 = status; break;
- case 4 :g_ledStatus.led16.led.led05 = status; break;
- case 5 :g_ledStatus.led16.led.led06 = status; break;
- case 6 :g_ledStatus.led16.led.led07 = status; break;
- case 7 :g_ledStatus.led16.led.led08 = status; break;
- case 8 :g_ledStatus.led16.led.led09 = status; break;
- case 9 :g_ledStatus.led16.led.led10 = status; break;
- case 10 :g_ledStatus.led16.led.led11 = status; break;
- case 11 :g_ledStatus.led16.led.led12 = status; break;
- case 12 :g_ledStatus.led16.led.led13 = status; break;
- case 13 :g_ledStatus.led16.led.led14 = status; break;
- case 14 :g_ledStatus.led16.led.led15 = status; break;
- case 15 :g_ledStatus.led16.led.led16 = status; break;
- default : break;
- }
- CH455H_LED_test00(g_ledStatus.led16.status);
- }
- void set_led_update_status(uint16_t status)
- {
- //return;
- if(g_ptTest.bTestStart == 1) return;
- CH455H_LED_test00(status);
- }
- void set_led_no_init_sn(uint16_t status)
- {
- // return;
- if(g_ptTest.bTestStart == 1) return;
- CH455H_LED_test00(status);
- }
- /* 显示lora信道 编号 */
- void set_led_lora_index(uint16_t status)
- {
- if(g_ptTest.bTestStart == 1) return;
- // if(g_ledStatus.status != LED_DISP_LORA ) return;
- CH455H_LED_test00(status);
- }
|