精华内容
下载资源
问答
  • 复用设备可以将1~30路电话1路N*64K以太网信号复合成一个标准的2M(E1)通道进行传输。该设备采用的专用数字复接芯片,它将设备中的数字逻辑功能几乎全部集成,从而显著提高了产品的性能并降低了成本。该设

    语音复用设备是一种小容量、多业务的复用及传输设备,它能为用户提供综合的通信功能,满足用户对电话、数据以及计算机网络连接的实际需要。它的多种传输方式使其能灵活的应用在各种通信网络中:可以作为光电一体化综合通信业务接入设备,或作为小容量多业务接口的PCM复用设备,或作为专线网络的综合通信业务接入设备。

    什么是语音复用设备?

    复用设备可以将1~30路电话和1路N*64K以太网信号复合成一个标准的2M(E1)通道进行传输。该设备采用的专用数字复接芯片,它将设备中的数字逻辑功能几乎全部集成,从而显著提高了产品的性能并降低了成本。该设备整机性能优良,工作稳定可靠,功耗低,集成度高,体积小,易于安装维护。

    语音复用设备的特点:
    1、采用大规模集成芯片,电路简单,稳定、可靠;
    2、需要提供2路标准E1接口,阻抗为75Ω,子E1接口可作备份或级联方式使用;
    3、需要两个E1接口之间具备断电直通功能;
    4、可提供16路自动电话接口(FXS)或交换接口(FXO);
    5、可提供16路公务电话接口,即两端分别配置为自动电话接口(FXS);
    6、可提供20路RS232接口;
    7、可提供16路2/4线E/M接口;
    8、可提供2路以太网接口;
    9、提供6路V.35接口;
    10、可提供8路同步V.24接口;
    11、可提供1路网管接口,网管功能强大并支持系统升级;
    12、可提供音频接口增益和时隙可调;
    13、需要完善的管理控制系统:可以通过WINDOWS系统的超级终端登录本机进行操作设置,也可以通过 HHCTC网络管理系统进行统一的管理;
    14、需要具备完善的告警及状态指示功能;
    15、需要适应多种电源环境DC-48V、AC220V。

    好了,以上内容就是飞畅科技关于什么是语音复用设备以及语音复用设备的特点有哪些?这个问题的相关详细介绍,希望能对大家有所帮助!杭州飞畅,20年专注光纤通信研发、生产和销售,主营光端机、光纤收发器、工业交换机、协议转换器等,我们为客户提供定制化的产品服务,欢迎前来了解、交流。

    展开全文
  •   通过对选项字节的写操作来实现TIM2的CH3通道的PWM输出IO复用。能够设置为PA3或者PD2输出。 通过STVP方式操作链接 选项字节   选项字节包含芯片硬件特性的配置存储器的保护信息,这些字节保存在存储器中一...

    功能实现目标

      通过对选项字节的写操作来实现TIM2的CH3通道的PWM输出IO复用。能够设置为PA3或者PD2输出。


    通过STVP方式操作链接

    选项字节

      选项字节包含芯片硬件特性的配置和存储器的保护信息,这些字节保存在存储器中一个专用的块内。除了ROP(读出保护)字节,每一个选项字节必须被保存两次。一个是通常的格式(OPTx)和一个用来备份互补格式的(NOPTx)。选项字节能够通过应用程序在IAP模式下改动,可是ROP选项仅仅能在ICP模式(通过SWIM)下被改动。

    有关SWIM编程过程的内容能够參考STM8S闪存编程手冊(PM0051)和STM8 SWIM通信协议和调试模块用户手冊(UM0470)。


      不同的芯片的选项字节大小不一样,详细的能够參考芯片数据手冊。如用STM8S103F3来举例。选项字节例如以下:

    选项字节

      STM8S103F对于20脚封装的产品的复用功能重定义位:

    STM8S103F复用功能重定义位

      由此可知我们要将OPT2字节中的AFR1位进行写操作,通过写0。则portA3复用功能TIM2_CH3,通过写1,portD2复用功能TIM2_CH3。

    接下来通过程序实现这个功能,能够改动AFR1的值来看PWM输出是否切换了管脚。假设能,则是实现了写操作。
      选项字节存放在EEPROM中,所以能够通过读写EEPROM一样的操作方式来改动选项字节。应用程序能够直接向目标地址进行写操作。地址从上面的图中我们已经知道了:0x4803,0x4804。寄存器的配置能够查阅參考手冊(RM0016)。


      相关寄存器操作:

    FLASH_CR2

    FLASH_NCR2

    測试程序实现

      注意:实现程序擦写Option Bytes时,不能执行应用程序,否则会出现错误!只是还是认为这点麻烦啊。还不如用STVP来擦写,要是能够放在应用程序中共存来擦写就好了,用程序实现复用就这么麻烦吗?希望能探索找到好的方法,最后仅仅找到了个不靠谱的。就是在擦写后加上延时。可是这个时管用时无论用。还是再查阅资料看看是怎么回事?

    ST Visual Develop

      可是用STVP擦写时又遇到了这个错误:

    Error : Error on Option Bytes (complementary bytes). Reprogram Option Bytes of device
    Error : < OPTION BYTE verifying failed.
    

      用STVP来擦写Option Bytes了。先将ROP设置为ON,然后再擦写Option Bytes,会出现两个提示框,选择是(Y)。再之后又将ROP设置为OFF,再次擦写Option Bytes,则又能够用STVD通过stlink来烧敲代码并仿真了。

    STVP program option bytes

    T1

    T2

    測试程序:
    
    /* MAIN.C file
    Functons    :   操作option byte字节,设置IO复用,来改动TIM2的CH3通道PWM输出管脚PA3 or PD2
    Date        :   2015年7月22日
    Author      :   yicm
    Notes       :   
     */
    
    #include<stm8s003f3p.h>
    
    void CLK_init(void)
    {
        CLK_ICKR |= 0X01;           //使能内部快速时钟 HSI
        CLK_CKDIVR = 0x08;          //16M内部RC经2分频后系统时钟为8M
        while(!(CLK_ICKR&0x02));    //HSI准备就绪 
        CLK_SWR=0xe1;               //HSI为主时钟源 
    }
    
    void Init_GPIO(void)
    {
        /*设置为推挽输出,PD2接了LED灯*/
        PD_DDR |= 0X04;             //设置PD2port为输出模式
        PD_CR1 |= 0X04;             //设置PD2port为推挽输出模式
        PD_CR2 &= 0XFD;
    
        PA_DDR |= 0X08;             //设置PA3port为输出模式
        PA_CR1 |= 0X08;             //设置PA3port为推挽输出模式
        PA_CR2 |= 0XF7;
    }
    
    void Init_Tim2(void)
    {
        TIM2_CCMR3 |=   0X70;   //设置定时器2三通道(PD2)输出比較三模式
        TIM2_CCMR3 |= 0X04;     //输出比較3预装载使能
    
        TIM2_CCER2 |= 0x03;     //通道3使能,低电平有效,配置为输出
    
        // 初始化时钟分频器为1,即计数器的时钟频率为Fmaster=8M/64=0.125MHZ
        TIM2_PSCR = 0X07;   
        //初始化自己主动装载寄存器,决定PWM 方波的频率。Fpwm=0.125M/62500=2HZ
        TIM2_ARRH = 62500/256;
        TIM2_ARRL = 62500%256;
        //初始化比較寄存器。决定PWM 方波的占空比:5000/10000 = 50%
        TIM2_CCR3H = 31250/256;
        TIM2_CCR3L = 31250%256;
    
    
        //启动计数;更新中断失能
        TIM2_CR1 |= 0x81;
        //TIM2_IER |= 0x00;        
    }
    
    void Write_Option_Byte(void)
    {   
        unsigned char opt[6] = {0,0,0x00,0,0,0};
    
        /*解锁Flash*/
        do
        {
            FLASH_DUKR = 0xAE;
            FLASH_DUKR = 0x56;      
        }
        while(!(FLASH_IAPSR & 0X08));
    
        /*对选项字节进行写操作使能*/
        FLASH_CR2 = 0X80;
        /*互补控制寄存器*/
        FLASH_NCR2 = 0X7F;
        /*写操作,0x02:PD2。0x00:PA3*/
        *((unsigned char *)0x4800) = opt[0];
    
        *((unsigned char *)0x4801) = opt[1];
        *((unsigned char *)0x4802) = ~opt[1];
    
        *((unsigned char *)0x4803) = opt[2];
        *((unsigned char *)0x4804) = ~opt[2];
    
        *((unsigned char *)0x4805) = opt[3];
        *((unsigned char *)0x4806) = ~opt[3];
    
        *((unsigned char *)0x4807) = opt[4];
        *((unsigned char *)0x4808) = ~opt[0];
    
        *((unsigned char *)0x4809) = opt[5];
        *((unsigned char *)0x480A) = ~opt[5];  
    
        /*等待写结束*/
        while(!(FLASH_IAPSR & 0x04));
    }
    
    main()
    {
        int i;
    
        Write_Option_Byte();    //执行程序时,屏蔽  
        for(i=0;i<10000;++i);   //延时效果,有时加上延时,能够使擦写和应用程序同一时候不屏蔽也能管用
    
        CLK_init();             //擦写时屏蔽。否则下次stlink仿真时会出错
        Init_GPIO();            //擦写时屏蔽,否则下次stlink仿真时会出错
        Init_Tim2();            //擦写时屏蔽,否则下次stlink仿真时会出错
        while (1);
    }

    转载于:https://www.cnblogs.com/zhchoutai/p/8602234.html

    展开全文
  • 一、问题 BIO NIO 作为 Server 端,当建立了 10 个连接时,分别...而 NIO 是一种同步非阻塞的 I/O 模型,它的核心技术是多路复用,可以使用一个链接上的不同通道来处理不同的请求,所以即使有 10 个连接,对于...

    一、问题

    BIO 和 NIO 作为 Server 端,当建立了 10 个连接时,分别产生多少个线程?

    答案: 因为传统的 IO 也就是 BIO 是同步线程堵塞的,所以每个连接都要分配一个专用线程来处理请求,这样 10 个连接就会创建 10 个线程去处理。而 NIO 是一种同步非阻塞的 I/O 模型,它的核心技术是多路复用,可以使用一个链接上的不同通道来处理不同的请求,所以即使有 10 个连接,对于 NIO 来说,开启 1 个线程就够了。

    二、BIO 代码实现

    public class DemoServer extends Thread {
        private ServerSocket serverSocket;
        public int getPort() {
            return  serverSocket.getLocalPort();
        }
        public void run() {
            try {
                serverSocket = new ServerSocket(0);
                while (true) {
                    Socket socket = serverSocket.accept();
                    RequestHandler requestHandler = new RequestHandler(socket);
                    requestHandler.start();
                }
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                if (serverSocket != null) {
                    try {
                        serverSocket.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
        public static void main(String[] args) throws IOException {
            DemoServer server = new DemoServer();
            server.start();
            try (Socket client = new Socket(InetAddress.getLocalHost(), server.getPort())) {
                BufferedReader bufferedReader = new BufferedReader(new                   InputStreamReader(client.getInputStream()));
                bufferedReader.lines().forEach(s -> System.out.println(s));
            }
        }
     }
    // 简化实现,不做读取,直接发送字符串
    class RequestHandler extends Thread {
        private Socket socket;
        RequestHandler(Socket socket) {
            this.socket = socket;
        }
        @Override
        public void run() {
            try (PrintWriter out = new PrintWriter(socket.getOutputStream());) {
                out.println("Hello world!");
                out.flush();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
     }
    
    • 服务器端启动 ServerSocket,端口 0 表示自动绑定一个空闲端口。
    • 调用 accept 方法,阻塞等待客户端连接。
    • 利用 Socket 模拟了一个简单的客户端,只进行连接、读取、打印。
    • 当连接建立后,启动一个单独线程负责回复客户端请求。

    这样,一个简单的 Socket 服务器就被实现出来了。

    (图片来源于杨晓峰)

    三、NIO 代码实现

    public class NIOServer extends Thread {
        public void run() {
            try (Selector selector = Selector.open();
                 ServerSocketChannel serverSocket = ServerSocketChannel.open();) {// 创建 Selector 和 Channel
                serverSocket.bind(new InetSocketAddress(InetAddress.getLocalHost(), 8888));
                serverSocket.configureBlocking(false);
                // 注册到 Selector,并说明关注点
                serverSocket.register(selector, SelectionKey.OP_ACCEPT);
                while (true) {
                    selector.select();// 阻塞等待就绪的 Channel,这是关键点之一
                    Set<SelectionKey> selectedKeys = selector.selectedKeys();
                    Iterator<SelectionKey> iter = selectedKeys.iterator();
                    while (iter.hasNext()) {
                        SelectionKey key = iter.next();
                       // 生产系统中一般会额外进行就绪状态检查
                        sayHelloWorld((ServerSocketChannel) key.channel());
                        iter.remove();
                    }
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        private void sayHelloWorld(ServerSocketChannel server) throws IOException {
            try (SocketChannel client = server.accept();) {          client.write(Charset.defaultCharset().encode("Hello world!"));
            }
        }
       // 省略了与前面类似的 main
    }
    
    
    • 首先,通过 Selector.open() 创建一个 Selector,作为类似调度员的角色。
    • 然后,创建一个 ServerSocketChannel,并且向 Selector 注册,通过指定 SelectionKey.OP_ACCEPT,告诉调度员,它关注的是新的连接请求。注意:为什么我们要明确配置非阻塞模式呢?这是因为阻塞模式下,注册操作是不允许的,会抛出 IllegalBlockingModeException 异常。
    • Selector 阻塞在 select 操作,当有 Channel 发生接入请求,就会被唤醒。
    • 在 sayHelloWorld 方法中,通过 SocketChannel 和 Buffer 进行数据操作,在本例中是发送了一段字符串。

    可以看到,在前面两个样例中,IO 都是同步阻塞模式,所以需要多线程以实现多任务处理。而 NIO 则是利用了单线程轮询事件的机制,通过高效地定位就绪的 Channel,来决定做什么,仅仅 select 阶段是阻塞的,可以有效避免大量客户端连接时,频繁线程切换带来的问题,应用的扩展能力有了非常大的提高。下面这张图对这种实现思路进行了形象地说明。

    (图片来源于杨晓峰)

    四、参考资料

    Java核心36讲

    近期热门文章

    Java 最常见的 200+ 面试题

    如果你喜欢本文,扫描二维码关注微信公众号「王磊的博客」

    公众号二维码

    展开全文
  • 一、问题 BIO NIO 作为 Server 端,当建立了 10 个连接时,分别产生多少个线程? 答案:因为传统的 IO 也就是...而 NIO 是一种同步非阻塞的 I/O 模型,它的核心技术是多路复用,可以使用一个链接上的不同通道来处...

    一、问题

    BIO 和 NIO 作为 Server 端,当建立了 10 个连接时,分别产生多少个线程?

    答案: 因为传统的 IO 也就是 BIO 是同步线程堵塞的,所以每个连接都要分配一个专用线程来处理请求,这样 10 个连接就会创建 10 个线程去处理。而 NIO 是一种同步非阻塞的 I/O 模型,它的核心技术是多路复用,可以使用一个链接上的不同通道来处理不同的请求,所以即使有 10 个连接,对于 NIO 来说,开启 1 个线程就够了。

    二、BIO 代码实现

    public class DemoServer extends Thread {
        private ServerSocket serverSocket;
        public int getPort() {
            return  serverSocket.getLocalPort();
        }
        public void run() {
            try {
                serverSocket = new ServerSocket(0);
                while (true) {
                    Socket socket = serverSocket.accept();
                    RequestHandler requestHandler = new RequestHandler(socket);
                    requestHandler.start();
                }
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                if (serverSocket != null) {
                    try {
                        serverSocket.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
        public static void main(String[] args) throws IOException {
            DemoServer server = new DemoServer();
            server.start();
            try (Socket client = new Socket(InetAddress.getLocalHost(), server.getPort())) {
                BufferedReader bufferedReader = new BufferedReader(new                   InputStreamReader(client.getInputStream()));
                bufferedReader.lines().forEach(s -> System.out.println(s));
            }
        }
     }
    // 简化实现,不做读取,直接发送字符串
    class RequestHandler extends Thread {
        private Socket socket;
        RequestHandler(Socket socket) {
            this.socket = socket;
        }
        @Override
        public void run() {
            try (PrintWriter out = new PrintWriter(socket.getOutputStream());) {
                out.println("Hello world!");
                out.flush();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
     }
    • 服务器端启动 ServerSocket,端口 0 表示自动绑定一个空闲端口。
    • 调用 accept 方法,阻塞等待客户端连接。
    • 利用 Socket 模拟了一个简单的客户端,只进行连接、读取、打印。
    • 当连接建立后,启动一个单独线程负责回复客户端请求。

    这样,一个简单的 Socket 服务器就被实现出来了。

    bio.png

    (图片来源于杨晓峰)

    三、NIO 代码实现

    public class NIOServer extends Thread {
        public void run() {
            try (Selector selector = Selector.open();
                 ServerSocketChannel serverSocket = ServerSocketChannel.open();) {// 创建 Selector 和 Channel
                serverSocket.bind(new InetSocketAddress(InetAddress.getLocalHost(), 8888));
                serverSocket.configureBlocking(false);
                // 注册到 Selector,并说明关注点
                serverSocket.register(selector, SelectionKey.OP_ACCEPT);
                while (true) {
                    selector.select();// 阻塞等待就绪的 Channel,这是关键点之一
                    Set<SelectionKey> selectedKeys = selector.selectedKeys();
                    Iterator<SelectionKey> iter = selectedKeys.iterator();
                    while (iter.hasNext()) {
                        SelectionKey key = iter.next();
                       // 生产系统中一般会额外进行就绪状态检查
                        sayHelloWorld((ServerSocketChannel) key.channel());
                        iter.remove();
                    }
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        private void sayHelloWorld(ServerSocketChannel server) throws IOException {
            try (SocketChannel client = server.accept();) {          client.write(Charset.defaultCharset().encode("Hello world!"));
            }
        }
       // 省略了与前面类似的 main
    }
    
    • 首先,通过 Selector.open() 创建一个 Selector,作为类似调度员的角色。
    • 然后,创建一个 ServerSocketChannel,并且向 Selector 注册,通过指定 SelectionKey.OP_ACCEPT,告诉调度员,它关注的是新的连接请求。注意:为什么我们要明确配置非阻塞模式呢?这是因为阻塞模式下,注册操作是不允许的,会抛出 IllegalBlockingModeException 异常。
    • Selector 阻塞在 select 操作,当有 Channel 发生接入请求,就会被唤醒。
    • 在 sayHelloWorld 方法中,通过 SocketChannel 和 Buffer 进行数据操作,在本例中是发送了一段字符串。

    可以看到,在前面两个样例中,IO 都是同步阻塞模式,所以需要多线程以实现多任务处理。而 NIO 则是利用了单线程轮询事件的机制,通过高效地定位就绪的 Channel,来决定做什么,仅仅 select 阶段是阻塞的,可以有效避免大量客户端连接时,频繁线程切换带来的问题,应用的扩展能力有了非常大的提高。下面这张图对这种实现思路进行了形象地说明。

    nio.png

    (图片来源于杨晓峰)

    四、参考资料

    Java核心36讲

    原文地址https://www.cnblogs.com/over/p/10542528.html

    展开全文
  • 一、问题 BIO NIO 作为 Server 端,当建立了 10 个连接时,分别产生...而 NIO 是一种同步非阻塞的 I/O 模型,它的核心技术是多路复用,可以使用一个链接上的不同通道来处理不同的请求,所以即使有 10 个连接,...
  • 目前锂离子电池电压检测主要有门电路法和专用芯片采集法。 门电路法测电压的塬理是应用门电路开关切换电压通道,结合模数转换将电池电压转换为数字信号,并由主控器进行处理。这种方法硬件成本通常较高,控制逻辑...
  • 一、问题 BIO NIO 作为 Server 端,当建立了 10 个连接时,分别产生...而 NIO 是一种同步非阻塞的 I/O 模型,它的核心技术是多路复用,可以使用一个链接上的不同通道来处理不同的请求,所以即使有 10 个连接,...
  • 一、问题 BIO NIO 作为 Server 端,当建立了 10 个连接时,分别产生...而 NIO 是一种同步非阻塞的 I/O 模型,它的核心技术是多路复用,可以使用一个链接上的不同通道来处理不同的请求,所以即使有 10 个连接,...
  • 结合高压线路保护装置光纤电流差动WXH-803光纤接口,对高压线路继电保护中光纤通信系统进行了分析,特别研究了光纤通道专用方式、64 Kbit/s复用方式2 Mbit/s复用方式等连接方式的通信体系结构,以及在以上3种连接...
  • 答:电路交换是一种直接的交换方式,它为一对需要进行通信的装置(站)之间提供一条临时的专用通道,即提供一条专用的传输通道,即可是物理通道又可是逻辑通道(使用时分或频分复用技术)。这条通道是由节点内部电路对...
  • T1载波与E1载波.txt

    2020-03-09 10:29:59
    采用同步时分复用技术将30个话音信道(64K)2个控制信道(16K)复合在一条2.048Mb/s的高速信道上。所谓的同步时分复用是:每个子通道按照时间片轮流占用带宽,但每个传输时间划分固定大小的周期,即使子通道不...
  • DDN - Digital Data Network

    2015-07-26 19:18:00
    DDN(Digital Data Network,数字数据网)是一种利用光纤、数字微波或卫星等数字传输通道和数字交叉复用设备组成的数字数据传输网。它可以为用户提供各种速率的高质量数字专用电 数字数据网(ddn 数字数据网(ddn ...
  • 针对以上应用,本文提出了一种基于FPGA的SATA 3.0存储阵列控制器,通过合理设计分层架构以及通道扩展方式,提高了阵列控制器的跨平台移植能力、升级能力、模块复用能力环境适应能力,弥补了专用RAID控制芯片依赖于...
  • DDN技术简介

    2018-12-14 18:08:40
    数字数据网( Digital Data Network,DDN)是一种利用光纤数字微波或卫星等数字传输通道和数字交 叉复用设备组成的数字数据传输网。DDN提供半固定连接的专用电路,是面向所有专线用户或专网用户的基 础电信网,可为专线...
  • STW51000在一颗芯片内集成了两个600MHz quad-MAC DSP核心,以及一个300MHz的ARM926 RISC核心、16Mb的嵌入式SRAM存储器和专用的信道解码协处理器。802.16e基准显示,一个STW51000可以满足运行在DSP上的完整的10MHz ...

空空如也

空空如也

1 2
收藏数 40
精华内容 16
关键字:

复用通道和专用通道