⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cs5532_test.lst

📁 CS5532的驱动程序
💻 LST
📖 第 1 页 / 共 4 页
字号:
__text_start:
__start:
    002A E5CF      LDI	R28,0x5F
    002B E0D4      LDI	R29,4
    002C BFCD      OUT	0x3D,R28
    002D BFDE      OUT	0x3E,R29
    002E 51C0      SUBI	R28,0x10
    002F 40D0      SBCI	R29,0
    0030 EA0A      LDI	R16,0xAA
    0031 8308      STD	Y+0,R16
    0032 2400      CLR	R0
    0033 E6E0      LDI	R30,0x60
    0034 E0F0      LDI	R31,0
    0035 E010      LDI	R17,0
    0036 39E6      CPI	R30,0x96
    0037 07F1      CPC	R31,R17
    0038 F011      BEQ	0x003B
    0039 9201      ST	R0,Z+
    003A CFFB      RJMP	0x0036
    003B 8300      STD	Z+0,R16
    003C E5E4      LDI	R30,0x54
    003D E0F0      LDI	R31,0
    003E E6A0      LDI	R26,0x60
    003F E0B0      LDI	R27,0
    0040 E010      LDI	R17,0
    0041 35E4      CPI	R30,0x54
    0042 07F1      CPC	R31,R17
    0043 F021      BEQ	0x0048
    0044 95C8      LPM
    0045 9631      ADIW	R30,1
    0046 920D      ST	R0,X+
    0047 CFF9      RJMP	0x0041
    0048 940E004B  CALL	_main
_exit:
    004A CFFF      RJMP	_exit
FILE: G:\CS5532\firmware\main.c
(0001) /*******************************************************************************
(0002)   Copyright (C), 1988-2007 GSProg
(0003)   File name:      Main.c
(0004)   Author: ilan2003     Version:1.0        Date: 2007-10-11
(0005)   Description:    
(0006)   	MCU Name   	:	mega16
(0007)   	Frequency  	:	7.3728.0MHZ
(0008)   	Baudrate   	:	
(0009)   	IDE	   	:	ICCAVR6.31
(0010)   	ProjectName 	:	CS5532读写模块	 	 			
(0011)   	ModuleName	:			
(0012)   Others:  
(0013)   Function List:	
(0014)   	1. void main(void);	
(0015)   	
(0016)   	
(0017) 
(0018) ********************************************************************************/
(0019) #include <iom16v.h>			
(0020) #include <macros.h>	
(0021) 		
(0022) #include "CS5532.H"
(0023) #include "DEFINE.H"
(0024) #include "UART.H"
(0025) #include "INITIAL.H"
(0026) #include "DELAY.H"
(0027) 
(0028) 
(0029) 
(0030) 
(0031) void main(void)
(0032) {
(0033) 	all_init();
_main:
    004B 940E026A  CALL	_all_init
    004D C00F      RJMP	0x005D
(0034) 		
(0035) 	while(1)
(0036) 	{
(0037) 		ms_delay(10);
    004E E00A      LDI	R16,0xA
    004F 940E0281  CALL	_ms_delay
(0038) 		ms_delay(50);
    0051 E302      LDI	R16,0x32
    0052 940E0281  CALL	_ms_delay
(0039) 		ms_delay(100);
    0054 E604      LDI	R16,0x64
    0055 940E0281  CALL	_ms_delay
(0040) 		ms_delay(150);
    0057 E906      LDI	R16,0x96
    0058 940E0281  CALL	_ms_delay
(0041) 		ms_delay(200);
    005A EC08      LDI	R16,0xC8
    005B 940E0281  CALL	_ms_delay
    005D CFF0      RJMP	0x004E
    005E 9508      RET
_cs5532_wr_byte:
  i                    --> R20
  dat                  --> R16
    005F 940E029F  CALL	push_gset1
FILE: G:\CS5532\firmware\cs5532.c
(0001) /****************************************Copyright (c)**************************************************
(0002) **                               	
(0003) **                                     
(0004) **                                 	
(0005) ** 文   件   名: ca5532.c
(0006) ** 最后修改日期: 2007-10-8 9:40
(0007) ** 描        述: cs5532驱动程序
(0008) ** 版	     本: V1.0
(0009) ** 主  控  芯 片:M16  晶振频率:7.37MHZ, 
(0010) ** IDE:ICCAVR 6.31
(0011) **********************************************************************************************************/
(0012) #include <iom16v.h>
(0013) #include <macros.h>
(0014) 
(0015) #include "DEFINE.H"
(0016) #include "CS5532.H"
(0017) #include "DELAY.H"
(0018) 
(0019) uint08 cs5532_buf[4];
(0020) 
(0021) 
(0022) /**********************************************************************
(0023) functionName:void cs5532_wr_byte(uint08 dat)
(0024) description:
(0025) **********************************************************************/
(0026) void cs5532_wr_byte(uint08 dat)
(0027) {
(0028) 	uint08 i;
(0029) 	
(0030) 	for(i=0;i<8;i++)
    0061 2744      CLR	R20
    0062 C00E      RJMP	0x0071
(0031) 	{
(0032) 		if(dat&0x80)
    0063 FF07      SBRS	R16,7
    0064 C002      RJMP	0x0067
(0033) 		SET_SDI();
    0065 9AD8      SBI	0x1B,0
    0066 C001      RJMP	0x0068
(0034) 		else
(0035) 		CLR_SDI();
    0067 98D8      CBI	0x1B,0
(0036) 		NOP();NOP();
    0068 0000      NOP
    0069 0000      NOP
(0037) 		SET_SCK();
    006A 9AD9      SBI	0x1B,1
(0038) 		NOP();NOP();
    006B 0000      NOP
    006C 0000      NOP
(0039) 		CLR_SCK();
    006D 98D9      CBI	0x1B,1
(0040) 		dat<<=1;
    006E 0F00      LSL	R16
(0041) 		NOP();
    006F 0000      NOP
    0070 9543      INC	R20
    0071 3048      CPI	R20,0x8
    0072 F380      BCS	0x0063
(0042) 	}
(0043) 	SET_SDI();
    0073 9AD8      SBI	0x1B,0
    0074 940E02A2  CALL	pop_gset1
    0076 9508      RET
(0044) }
(0045) 
(0046) 
(0047) 
(0048) 
(0049) 
(0050) /**********************************************************************
(0051) functionName:uint08 cs5532_rd_byte(void)
(0052) description:
(0053) **********************************************************************/
(0054) uint08 cs5532_rd_byte(void)
(0055) {
(0056) 	uint08 i;
(0057) 	uint08 temp=0;
_cs5532_rd_byte:
  temp                 --> R16
  i                    --> R18
    0077 2700      CLR	R16
(0058) 	
(0059) 	for(i=0;i<8;i++)
    0078 2722      CLR	R18
    0079 C00A      RJMP	0x0084
(0060) 	{
(0061) 		temp<<=1;
    007A 0F00      LSL	R16
(0062) 		SET_SCK();
    007B 9AD9      SBI	0x1B,1
(0063) 		NOP();NOP();
    007C 0000      NOP
    007D 0000      NOP
(0064) 		if(STU_SDO)
(0065) 		temp|=1;
    007E 6001      ORI	R16,1
(0066) 		CLR_SCK();
    007F 98D9      CBI	0x1B,1
(0067) 		NOP();NOP();NOP();
    0080 0000      NOP
    0081 0000      NOP
    0082 0000      NOP
    0083 9523      INC	R18
    0084 3028      CPI	R18,0x8
    0085 F3A0      BCS	0x007A
(0068) 	}
(0069) 	return temp;
    0086 9508      RET
_cs5532_soft_rst:
  i                    --> R20
    0087 940E029F  CALL	push_gset1
(0070) }
(0071) 
(0072) 
(0073) /**********************************************************************
(0074) functionName:void cs5532_soft_rst(void)
(0075) description:
(0076) **********************************************************************/
(0077) void cs5532_soft_rst(void)
(0078) {
(0079) 	uint08 i;
(0080) 	for(i=0;i<15;i++)
    0089 2744      CLR	R20
    008A C003      RJMP	0x008E
(0081) 	{
(0082) 		cs5532_wr_byte(0xFF);
    008B EF0F      LDI	R16,0xFF
    008C DFD2      RCALL	_cs5532_wr_byte
    008D 9543      INC	R20
    008E 304F      CPI	R20,0xF
    008F F3D8      BCS	0x008B
(0083) 	}
(0084) 	cs5532_wr_byte(0xFE);
    0090 EF0E      LDI	R16,0xFE
    0091 DFCD      RCALL	_cs5532_wr_byte
    0092 940E02A2  CALL	pop_gset1
    0094 9508      RET
_cs5532_wr_reg:
  temp                 --> Y+0
  dat                  --> Y+6
  cmd                  --> R20
    0095 933A      ST	R19,-Y
    0096 932A      ST	R18,-Y
    0097 940E029F  CALL	push_gset1
    0099 2F40      MOV	R20,R16
    009A 9724      SBIW	R28,4
(0085) }
(0086) 
(0087) 
(0088) /**********************************************************************
(0089) functionName:
(0090) description:
(0091) **********************************************************************/
(0092) void cs5532_wr_reg(uint08 cmd,uint32 dat)
(0093) {
(0094) 	uint08 temp[4];
(0095) 	temp[0]=dat>>24;
    009B E188      LDI	R24,0x18
    009C E090      LDI	R25,0
    009D 01FE      MOVW	R30,R28
    009E 8026      LDD	R2,Z+6
    009F 8037      LDD	R3,Z+7
    00A0 8440      LDD	R4,Z+8
    00A1 8451      LDD	R5,Z+9
    00A2 938A      ST	R24,-Y
    00A3 0181      MOVW	R16,R2
    00A4 0192      MOVW	R18,R4
    00A5 940E02B6  CALL	lsr32
    00A7 8308      STD	Y+0,R16
(0096) 	temp[1]=dat>>16;
    00A8 01FE      MOVW	R30,R28
    00A9 8026      LDD	R2,Z+6
    00AA 8037      LDD	R3,Z+7
    00AB 8440      LDD	R4,Z+8
    00AC 8451      LDD	R5,Z+9
    00AD 0112      MOVW	R2,R4
    00AE 2444      CLR	R4
    00AF 2455      CLR	R5
    00B0 8229      STD	Y+1,R2
(0097) 	temp[2]=dat>>8;
    00B1 E088      LDI	R24,0x8
    00B2 E090      LDI	R25,0
    00B3 01FE      MOVW	R30,R28
    00B4 8026      LDD	R2,Z+6
    00B5 8037      LDD	R3,Z+7
    00B6 8440      LDD	R4,Z+8
    00B7 8451      LDD	R5,Z+9
    00B8 938A      ST	R24,-Y
    00B9 0181      MOVW	R16,R2
    00BA 0192      MOVW	R18,R4
    00BB 940E02B6  CALL	lsr32
    00BD 830A      STD	Y+2,R16
(0098) 	temp[3]=dat;
    00BE 01FE      MOVW	R30,R28
    00BF 8026      LDD	R2,Z+6
    00C0 8037      LDD	R3,Z+7
    00C1 8440      LDD	R4,Z+8
    00C2 8451      LDD	R5,Z+9
    00C3 822B      STD	Y+3,R2
(0099) 	cs5532_wr_byte(cmd);
    00C4 2F04      MOV	R16,R20
    00C5 DF99      RCALL	_cs5532_wr_byte
(0100) 	cs5532_wr_byte(temp[0]);
    00C6 8108      LDD	R16,Y+0
    00C7 DF97      RCALL	_cs5532_wr_byte
(0101) 	cs5532_wr_byte(temp[1]);
    00C8 8109      LDD	R16,Y+1
    00C9 DF95      RCALL	_cs5532_wr_byte
(0102) 	cs5532_wr_byte(temp[2]);
    00CA 810A      LDD	R16,Y+2
    00CB DF93      RCALL	_cs5532_wr_byte
(0103) 	cs5532_wr_byte(temp[3]);	 
    00CC 810B      LDD	R16,Y+3
    00CD DF91      RCALL	_cs5532_wr_byte
    00CE 9624      ADIW	R28,4
    00CF 940E02A2  CALL	pop_gset1
    00D1 9622      ADIW	R28,2
    00D2 9508      RET
_cs5532_rd_reg:
  cmd                  --> R20
    00D3 940E029F  CALL	push_gset1
    00D5 2F40      MOV	R20,R16
(0104) }
(0105) 
(0106) 
(0107) 
(0108) /**********************************************************************
(0109) functionName:void cs5532_rd_reg(uint08 cmd)
(0110) description:
(0111) **********************************************************************/
(0112) void cs5532_rd_reg(uint08 cmd)
(0113) {
(0114) 	cs5532_wr_byte(cmd);
    00D6 2F04      MOV	R16,R20
    00D7 DF87      RCALL	_cs5532_wr_byte
(0115) 	cs5532_buf[0]=cs5532_rd_byte();
    00D8 DF9E      RCALL	_cs5532_rd_byte
    00D9 93000060  STS	cs5532_buf,R16
(0116) 	cs5532_buf[1]=cs5532_rd_byte();
    00DB DF9B      RCALL	_cs5532_rd_byte
    00DC 93000061  STS	cs5532_buf+1,R16
(0117) 	cs5532_buf[2]=cs5532_rd_byte();
    00DE DF98      RCALL	_cs5532_rd_byte
    00DF 93000062  STS	cs5532_buf+2,R16
(0118) 	cs5532_buf[3]=cs5532_rd_byte();
    00E1 DF95      RCALL	_cs5532_rd_byte
    00E2 93000063  STS	cs5532_buf+3,R16
    00E4 940E02A2  CALL	pop_gset1
    00E6 9508      RET
(0119) }
(0120) 
(0121) 
(0122) /**********************************************************************
(0123) functionName:
(0124) description:
(0125) **********************************************************************/
(0126) void cs5532_init(void)
(0127) {
(0128) 	ms_delay(50);			//等待电源稳定	
_cs5532_init:
    00E7 E302      LDI	R16,0x32
    00E8 940E0281  CALL	_ms_delay
(0129) 	cs5532_soft_rst();		//软件复位
    00EA DF9C      RCALL	_cs5532_soft_rst
    00EB 9508      RET
FILE: G:\CS5532\firmware\uart.c
(0001) /****************************************Copyright (c)**************************************************
(0002) **                               	
(0003) **                                   
(0004) **                                 
(0005) ** 文   件   名: uart.c
(0006) ** 最后修改日期: 2007-10-8
(0007) ** 描        述: rs232通讯函数
(0008) ** 版	     本: V1.0
(0009) ** 主  控  芯 片:M16 晶振频率:7.37MHZ, 波特率19200
(0010) ** IDE:ICCAVR 6.31
(0011) **********************************************************************************************************/																							   
(0012) 
(0013) #define 	MCU_M16
(0014) #define		MCLK737	
(0015) 
(0016) 
(0017) #ifdef MCU_M8
(0018) #include <iom8v.h> 
(0019) #endif
(0020) 
(0021) #ifdef MCU_M16
(0022) #include <iom16v.h>
(0023) #endif
(0024) 
(0025) #include <macros.h>
(0026) #include "DEFINE.H"
(0027) #include "UART.H"
(0028) #include "COMMAND.H"
(0029) 
(0030) 
(0031) uint08 uart_tx_buf[UART_BUF_SIZE];			//发送缓冲
(0032) uint08 uart_tx_wr_ptr,uart_tx_rd_ptr;		
(0033) uint08 uart_rx_counter,uart_tx_counter;
(0034) uint08 uart_rx_buf[UART_BUF_SIZE];			//接收缓冲,相当于消息体
(0035) uint08 seq_number;					//顺序数
(0036) uint08 check_sum;					//和校验
(0037) uint08 rx_stu_mac;					//接收状态机
(0038) uint08 msg_end_flag;					//消息体结束标志
(0039) uint16 msg_size;					//消息尺寸
(0040) 
(0041) 
(0042) /**********************************************************************
(0043) functionName:void uart_init(void)
(0044) description:uart初始化
(0045) **********************************************************************/	
(0046) void uart_init(void)
(0047) {
(0048) 	//IO初始化
(0049) 	SET_BIT(PORTD,PD0);
_uart_init:
    00EC 9A90      SBI	0x12,0
(0050) 	SET_BIT(PORTD,PD1);
    00ED 9A91      SBI	0x12,1
(0051) 	SET_BIT(DDRD,PD1);	
    00EE 9A89      SBI	0x11,1
(0052) 	CLR_BIT(DDRD,PD0);	
    00EF 9888      CBI	0x11,0
(0053) 	
(0054) 	//寄存器初始化
(0055) 	UCSRB = 0x00; 		
    00F0 2422      CLR	R2
    00F1 B82A      OUT	0x0A,R2
(0056)  	UCSRA = 0x00;
    00F2 B82B      OUT	0x0B,R2
(0057)  	UCSRC = 0x86;
    00F3 E886      LDI	R24,0x86
    00F4 BD80      OUT	0x20,R24
(0058) 	UBRRL = BAUD19200; 			//设置拨特率
    00F5 E187      LDI	R24,0x17
    00F6 B989      OUT	0x09,R24
(0059)  	UBRRH = 0x00; 				//set baud rate hi
    00F7 BC20      OUT	0x20,R2
(0060)  	UCSRB = 0x98;				//使用中断
    00F8 E988      LDI	R24,0x98
    00F9 B98A      OUT	0x0A,R24
(0061) 	
(0062) 	//变量初始化
(0063) 	uart_tx_wr_ptr=uart_tx_rd_ptr=0;
    00FA 92200080  STS	uart_tx_rd_ptr,R2
    00FC 92200081  STS	uart_tx_wr_ptr,R2
(0064) 	uart_rx_counter=uart_tx_counter=0;
    00FE 9220007E  STS	uart_tx_counter,R2
    0100 9220007F  STS	uart_rx_counter,R2
(0065) 	msg_end_flag=0;				//表示没有接收到数据
    0102 92200066  STS	msg_end_flag,R2
(0066) 	rx_stu_mac=ST_START;
    0104 EF80      LDI	R24,0xF0
    0105 93800067  STS	rx_stu_mac,R24
    0107 9508      RET
_uart0_rx_isr:
  uart_data            --> R16
    0108 922A      ST	R2,-Y
    0109 923A      ST	R3,-Y
    010A 924A      ST	R4,-Y
    010B 925A      ST	R5,-Y
    010C 930A      ST	R16,-Y
    010D 932A      ST	R18,-Y
    010E 933A      ST	R19,-Y
    010F 938A      ST	R24,-Y
    0110 939A      ST	R25,-Y
    0111 93EA      ST	R30,-Y
    0112 93FA      ST	R31,-Y
    0113 B62F      IN	R2,0x3F

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -