DS26528 点击型号即可查看芯片规格书
当为一个新设计的电信系统开发软件时,最棘手的任务莫过于实现基本的设备操作。 Ds26528为了方便初期系统开发,马克西姆公司提供了C风格范例代码,它可以在T1或E1模式下初始化设备,软件开发人员只需针对所需的操作修改代码,或编写与特定系统相关的功能。一旦代码编译完毕,即可载入系统进行测试与评估。
图1中所示的范例代码在稍加修改之后就可以正确编译以供目标系统使用。“写(地址、数据)”和“等(毫秒)”两个函数调用过程与系统相关,因此需要根据所用的微处理器编写。笨笨,笨笨,笨笨,笨笨,笨笨,笨笨,笨笨,笨笨,笨笨,笨笨,笨笨,笨笨,笨笨,笨笨,笨笨,笨笨,笨笨,笨笨,笨笨,笨笨。对于其他情况,则需要修改代码或编写函数调用来解决。此段代码还包含某些寄存器的多种不同设置,从而为开发人员提供了时钟频率、线路编码等参数的多种选择。虽然包含了大量的基本功能,但该代码并不完备。当需要实现其他附加功能时,请参考数据资料。
/* 配置举例DS26528工作在E1模式。本例假定E1操作,因此T1配置 的函数调用已被注释掉。只需注释掉E1配置函数 调用,取消注释T1配置函数调用以进行T1操作。该文件遵循C风格约定。然而,下面列出的函数 调用的实际代码是特定于实现的,需要添加: 函数调用:write(address, data), wait(milliseconds) 以下注释仅指示一些可能的时钟源 ,可用于E1或T1操作。主时钟配置可以使用n = 1、2、4的倍数,或8 MCLK =必须是一个n x 2.048 MHz信号为E1操作MCLK =必须是一个n x 1.544或n x 2.048 MHz信号为T1操作TCLK =必须是2.048 MHz信号为E1操作TCLK =必须是1.544 MHz信号为T1操作* /空白initialization_main全球初始化 {/ * * / / *开始全球收发时钟控制寄存器对适当很重要* / / *设备操作参考数据表的所有可能的配置。*/ write(0x00F3, 0x00);// GTCCR, E1 Mode MCLK-2.048, BPFS-2.048, BPREF-RCLK1 // write(0x00F3, 0x01);// GTCCR, E1 Mode MCLK-4.096, BPFS-2.048, BPREF-RCLK1 // write(0x00F3, 0x02);// GTCCR, E1 Mode MCLK-8.192, BPFS-2.048, BPREF-RCLK1 // write(0x00F3, 0x03);// GTCCR, E1 Mode MCLK-16.384, BPFS-2.048, BPREF-RCLK1 // write(0x00F3, 0x08);// GTCCR, T1 Mode MCLK-2.048, BPFS-1.544, BPREF-RCLK1 // write(0x00F3, 0x09);// GTCCR, T1 Mode MCLK-4.096, BPFS-1.544, BPREF-RCLK1 // write(0x00F3, 0x0A);// GTCCR, T1 Mode MCLK-8.192, BPFS-1.544, BPREF-RCLK1 // write(0x00F3, 0x0B);// GTCCR, T1 Mode MCLK-16.384, BPFS-1.544, BPREF-RCLK1 // write(0x00F3, 0x0C);// GTCCR, T1 Mode MCLK-1.544, BPFS-1.544, BPREF-RCLK1 // write(0x00F3, 0x0D);// GTCCR, T1 Mode MCLK-3.088, BPFS-1.544, BPREF-RCLK1 // write(0x00F3, 0x0E);// GTCCR, T1 Mode MCLK-6.176, BPFS-1.544, BPREF-RCLK1 // write(0x00F3, 0x0F);// GTCCR, T1 Mode MCLK-12.352, BPFS-1.544, BPREF-RCLK1 // write(0x00F3, 0x90);// GTCCR, E1 Mode MCLK-2.048, BPFS-2.048, BPREF-MCLK // write(0x00F3, 0x88);// GTCCR, T1 Mode MCLK-2.048, BPFS-1.544, BPREF-MCLK /*配置后等待1 ms时钟沉淀*/ Wait(1); /*配置全局Framer多功能引脚,IBO,和BPCLK。如果IBO */ /*模式被启用,RIBOC和TIBOC帧寄存器也必须在每个端口的基础上配置*/ /*,而不是全局*/ write(0x00F1, 0x00);// GFCR,设置IBO禁用,RFL/RFS/BLK, BPCLK-2。048 // write(0x00F1, 0x10);// GFCR,设置IBO禁用,RFL/RFS/BLK, BPCLK-4。096 // write(0x00F1, 0x20);// GFCR,设置IBO禁用,RFL/RFS/BLK, BPCLK-8。192 // write(0x00F1, 0x30);// GFCR,设置IBO禁用,RFL/RFS/BLK, BPCLK-16。384 // write(0x00F1, 0x50);// GFCR, Set IBO 2 Devices, RFL/RFS/BLK, BPCLK-4。096 // write(0x00F1, 0xA0);// GFCR, Set IBO 4 Devices, RFL/RFS/BLK, BPCLK-8。192 // write(0x00F1, 0xF0);// GFCR, Set IBO 8 Devices, RFL/RFS/BLK, BPCLK-16。384 /*启用Bulk Write以减少Framer, LIU和Bert初始化时间。*/ write(0x00F0, 0x04);// GTCR1,启用全局大容量写 // *执行全局LIU, Framer和BERT软件复位*/ Write (0x00F5, 0xFF);// GLSRR write(0x00F6, 0xFF);// GFSRR /*等待10ms复位完成*/ Wait (10); write(0x00F5, 0x00);// GLSRR write(0x00F6, 0x00);// GFSRR /*执行单独的接收和发送帧器软件复位。当使用上面的全局重置函数时,不需要这个*/ /*。*/ // write(0x0080, 0x02);// RMMR // write(0x0180, 0x02);// TMMR /*等待10毫秒复位完成*/ //等待(10); //写入(0x0080, 0x00);// RMMR // write(0x0180, 0x00);// TMMR // *零所有帧寄存器*/ 索引= 0x0000; while(index <0x00F0) { write(index, 0x00); index++; } index = 0x0100; while(index <0x01F0) { write(index, 0x00); index++; } /* 0所有刘寄存器*/ index = 0x1000 while(index <0x1020) { write(index, 0x00); index++; } /*零所有BERT寄存器*/ index = 0x1100; while(index <0x1110) { write(index, 0x00); index++; } /*在初始化结束时禁用批量写*/ write(0x00F0, 0x00);/ / GTCR1,禁用全球大部分写/ *初始化完成 */ /* 配置开始* / e1_configure ; / / t1_configure ; / *配置完成* /}无效e1_configure {/ * E1开始初始化* / / *这个函数假设所有端口配置相同。否则,*/ /*删除Global Bulk Write部分并重写函数为*/ /*支持单独的端口寻址和识别。*/ /*启用Bulk Write以减少Framer和LIU的配置时间。 */ write(0x00F0, 0x04);// GTCR1,启用全局大容量写 Write (0x0080, 0x01);// RMMR,设置接收帧E1模式 write(0x0180, 0x01);// TMMR,设置发送帧E1模式 write(0x0080, 0x81);// RMMR,设置接收帧E1模式和帧使能 write(0x0180, 0x81);// TMMR,设置发送帧E1模式和帧使能 write(0x0081, 0x60);// RCR1, Set Receive E1 HDB3 (Basic Frame) // write(0x0081, 0x68);// RCR1, Set Receive E1 HDB3, CRC4, and CCS (TS 16 Clear) // write(0x0081, 0x48);// RCR1, Set Receive E1 HDB3, CRC4, and CAS write(0x0084, 0x10);// RIOCR, Set RSYNC Frame Output, RSYSCLK-2.048 MHz // write(0x0084, 0x11);// RIOCR, Set RSYNC CAS M-Frame Output, RSYSCLK-2.048 MHz // write(0x0084, 0x13);// RIOCR, Set RSYNC CRC4 M-Frame Output, RSYSCLK-2.048 MHz /*注:在CCS模式下,仍然可以通过SSIEx寄存器使能CAS */ /*注:所有TCR1 E1配置都使能Si位直通*/ write(0x0181, 0x04);// TCR1, Set Transmit E1 HDB3 (Basic Frame) // write(0x0181, 0x05);// TCR1, Set Transmit E1 HDB3, CRC4, and CCS (TS 16 Clear) // write(0x0181, 0x45);// TCR1, Set Transmit E1 HDB3, CRC4, and CAS write(0x0184, 0x10);// TIOCR, Set TSYNC Frame Input, TSYSCLK-2.048 MHz // write(0x0184, 0x11);// TIOCR, Set TSYNC M-Frame Input, TSYSCLK-2.048 MHz // write(0x0184, 0x14);// TIOCR,设置TSYNC帧输出,TSYSCLK-2.048 MHz // write(0x0184, 0x15);// TIOCR, Set TSYNC M-Frame Output, TSYSCLK-2.048 MHz // *设置TAF和TNAF寄存器只在E1模式*/ write(0x164, 0x1B); write(0x165, 0x40); /*设置E1模式的发送信令寄存器*/ write(0x0140, 0x0B);//设置CAS多帧同步头 index = 0x0141; while(index <0x0150) { write(index, 0xDD); index++; } /*设置E1 Mode的发送信令插入使能寄存器*/ // write(0x0118, 0xFF);// SSIE1, Enable Transmit Signaling for channel 1-8 // write(0x0119, 0xFF);// SSIE2,启用9-16通道的传输信令 // write(0x011A, 0xFF);// SSIE3,启用17-24通道的传输信令 // write(0x011B, 0xFF);// SSIE4,启用18-32通道的传输信令 // *设置帧或有效负载环回如果需要*/ //写(0x0083, 0x01);// RCR3,设置帧回送 //写入(0x0083, 0x02);// RCR3,设置负载环回 // *在下一步之前完成所有帧寄存器配置*/ write(0x0080, 0xC1);// RMMR,设置接收帧E1模式,使能,Init完成 write(0x0180, 0xC1);// TMMR,设置发送帧E1模式,使能和Init完成 /* Configure LIU */ write(0x1000, 0x00);// LTRCR, E1模式,ITU G.775,并接收JA @ 128位 //写入(0x1000, 0x00);// LTRCR, E1 Mode, ETSI 300-233,接收JA @ 128位 write(0x1001, 0x00);// LTITSR, E1模式75欧姆w/传输Z-Term //写入(0x1001, 0x31);// LTITSR, E1 Mode 120 ohm w/Transmit Z-Term write(0x1007, 0x03);// LRISMR, E1模式75欧姆长距离w/接收z匹配 //写入(0x1007, 0x33);// LRISMR, E1模式120欧姆长距离w/接收z匹配 //写入(0x1007, 0x00);// LRISMR, E1模式75欧姆短距离w/接收z匹配 //写入(0x1007, 0x30);// LRISMR, E1模式120欧姆短距离w/接收z匹配 写(0x1002, 0x01);// LMCR,使能发送输出 //写(0x1002, 0x09);// LMCR,使能传输输出和远程环回 //写(0x1002, 0x11);// LMCR,使能传输输出和环回 //写(0x1002, 0x21);// LMCR,使能传输输出和本地环回 // *在配置结束时禁用批量写*/ Write (0x00F0, 0x00);// GTCR1, Disable Global Bulk Write } void t1_configure { /* T1初始化Begin */ /*本函数假设所有端口配置相同。否则,*/ /*删除Global Bulk Write部分并重写函数为*/ /*支持单独的端口寻址和识别。*/ /*启用Bulk Write以减少Framer和LIU的配置时间。 */ write(0x00F0, 0x04);// GTCR1,启用全局大容量写 Write (0x0080, 0x00);// RMMR,设置接收帧T1模式 write(0x0180, 0x00);// TMMR,设置发送帧T1模式 write(0x0080, 0x80);// RMMR,设置接收帧T1模式和帧使能 write(0x0180, 0x80);//设置发送帧T1模式和帧使能 write(0x0081, 0xC8);// RCR1, Set Receive T1 B8ZS, ESF, CRC6 Verify // write(0x0081, 0xE8);// RCR1,设置接收T1 B8ZS, D4, Ft &Fs Verify // write(0x0081, 0xCC);// RCR1, Set Receive J1 B8ZS, ESF, J-CRC6 Verify // write(0x0081, 0x68);// RCR1, Set Receive T1 B8ZS, SLC-96 (Also T1RCR2) // write(0x0014, 0x10);// T1RCR2, Set Receive T1, SLC-96 write(0x0084, 0x10);// RIOCR, Set RSYNC Frame Output, RSYSCLK-2.048 MHz // write(0x0084, 0x11);// RIOCR, Set RSYNC M-Frame Output, RSYSCLK-2.048 MHz /*注:所有TCR1 T1/J1配置都启用了SSIEx信令控制*/ write(0x0181, 0x14);// TCR1, Set Transmit T1 B8ZS // write(0x0181, 0x94);// TCR1, Set Transmit J1 B8ZS, J-CRC6 write(0x0183, 0x00);// TCR3, Set Transmit ESF // write(0x0183, 0x04);// TCR3, Set Transmit D4 or SLC-96 (Also TCR2) // write(0x0182, 0x40);// TCR2, Set Transmit SLC-96 write(0x0184, 0x10);// TIOCR, Set TSYNC Frame Input, TSYSCLK-2.048 MHz // write(0x0184, 0x11);// TIOCR, Set TSYNC M-Frame Input, TSYSCLK-2.048 MHz // write(0x0184, 0x14);// TIOCR,设置TSYNC帧输出,TSYSCLK-2.048 MHz // write(0x0184, 0x15);// TIOCR, Set TSYNC M-Frame Output, TSYSCLK-2.048 MHz // *将T1TFDL和T1TSLCx寄存器设置为T1 Mode Only */ write(0x162, 0x1C);// T1TFDL, Source D4 Mode Fs Bits write(0x164, 0x00);// T1TSLC1,源SLC-96模式C8-C1位 write(0x165, 0x10);// T1TSLC2, Source SLC-96 Mode M2-M1, Sp, and C11-C9 Bits write(0x166, 0x80);// T1TSLC3,源SLC-96模式Sp, S4-S1, A2-A1和M3位 // *设置T1模式的发送信令寄存器*/ index = 0x0140; while(index <0x014C) { write(index, 0xDD); index++; } /*设置T1模式的发送信令插入使能寄存器*/ // write(0x0118, 0xFF);// SSIE1, Enable Transmit Signaling for channel 1-8 // write(0x0119, 0xFF);// SSIE2,启用9-16通道的传输信令 // write(0x011A, 0xFF);// SSIE3,启用17-24通道的传输信令 // *配置帧或有效负载环回*/ //写(0x0083, 0x01);// RCR3,设置帧回送 //写入(0x0083, 0x02);// RCR3,设置负载环回 // *在下一步之前完成所有帧寄存器配置*/ write(0x0080, 0xC0);// RMMR,设置接收帧T1模式,使能,Init完成 write(0x0180, 0xC0);// TMMR,设置发送帧T1模式,使能和Init完成 /* Configure LIU */ write(0x1000, 0x02);// LTRCR, T1/J1 Mode, ANSI T1.231, and Receive JA @ 128 bits write(0x1001, 0x10);// LTITSR, T1模式100欧姆0dB CSU w/传输Z-Term //写入(0x1001, 0x20);// LTITSR, J1 Mode 110 ohm 0dB CSU w/Transmit Z-Term write(0x1007, 0x13);// LRISMR, T1模式100欧姆长距离w/接收z匹配 //写入(0x1007, 0x23);// LRISMR, J1模式110欧姆长距离w/接收z匹配 //写入(0x1007, 0x10);// LRISMR, T1模式100欧姆短距离w/接收z匹配 //写入(0x1007, 0x20);// LRISMR, J1模式110欧姆短距离w/接收z匹配 写(0x1002, 0x01);// LMCR,使能发送输出 //写(0x1002, 0x09);// LMCR,使能传输输出和远程环回 //写(0x1002, 0x11);// LMCR,使能传输输出和环回 //写(0x1002, 0x21);// LMCR,使能传输输出和本地环回 // *在配置结束时禁用批量写*/ Write (0x00F0, 0x00);// GTCR1,禁用全局大容量写 } |