最新免费av在线观看,亚洲综合一区成人在线,中文字幕精品无码一区二区三区,中文人妻av高清一区二区,中文字幕乱偷无码av先锋

登錄 免費注冊 首頁 | 行業(yè)黑名單 | 幫助
維庫電子市場網(wǎng)
技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng)
驅(qū)動編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計 | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe

波特率自適應(yīng)技術(shù)在DSP5402上的應(yīng)用之C++測試程序

作者:hotpower 欄目:DSP技術(shù)
波特率自適應(yīng)技術(shù)在DSP5402上的應(yīng)用之C++測試程序
/*-------------------------------------------------
  波特率自適應(yīng)技術(shù)在DSP5402上的應(yīng)用之C++測試程序
菜農(nóng) HotPower@126.com

2005.6.33   21:58    于西安大雁塔村隊部

菜地: http://hotpower.21ic.org
-------------------------------------------------*/
#include <cstdio> //C語言可以用stdio.h
#include <cstring>//C語言可以用string.h
#include "C5402DEF.h"//DSP菜鳥HotPower創(chuàng)建
#include "class.h"

#define ccsdebug 1//1--IO模擬SPI;  0--硬件McBSP模塊

extern "C" interrupt void Timer0Isr();//注意加extern "C"
extern "C" interrupt void Timer1Isr();

extern "C" interrupt void Eint0Isr();
extern "C" interrupt void Eint1Isr();
extern "C" interrupt void Eint2Isr();
extern "C" interrupt void Eint3Isr();


SystemObj::SystemObj(void)
{
  Disable();//關(guān)中斷
  SREG->IMR = 0x0000;//
  SREG->IFR = 0xffff;//清除
//設(shè)置0x0080為中斷向量表首址,在第2個128頁內(nèi)。
  SREG->PMST = (0x01 << PMST_IPTR) | (1 << PMST_MP_MC) | (1 << PMST_OVLY);
//  SREG->PMST |= (1 << PMST_DROM);//數(shù)據(jù)可const.
/*---------------------------------------------------------------------------
若:設(shè)置0x0100為中斷向量表首址,在第3個128頁內(nèi)。
則:*.cmd文件應(yīng)該改為:
     PAGE 0: VECS: origin=0x0100,  length=0x66
則:
  SREG->PMST = (0x02 << PMST_IPTR) | (1 << PMST_MP_MC) | (1 << PMST_OVLY);
----------------------------------------------------------------------------*/
  SystemInit();//系統(tǒng)初始化
}

void SystemObj::SystemInit(void)
{
  PllInit();//PLL初始化
  TIMER0Init();
  TIMER1Init();
  EintInit();
/*--------------------------------------------------------
  注意以下2個變量的作用域的不同
--------------------------------------------------------*/  
  if (::SystemRamTest != 0x55aa) {//全局變量SystemRamTest
    ::SystemRamTest = 0x55aa;//改寫全局變量
  }
  if (SystemRamTest != 0x55aa) {//類成員變量SystemRamTest
    SystemRamTest = 0x55aa;//改寫類成員變量
  }
  ::IOXF = 0;
}

void SystemObj::PllInit(void)
{
volatile unsigned int start;
  SREG->SWWSR = 0x2000;
  do {
    SREG->CLKMD = 0;
    __nop();
  }
  while(SREG->CLKMD & (1 << CLKMD_PLLSTATUS));
//  SREG->CLKMD = (0 << CLKMD_PLLMUL) | (30 << CLKMD_PLLCOUNT) | (1 << CLKMD_PLLONOFF) | (1 << CLKMD_PLLNDIV) | (1 << CLKMD_PLLSTATUS);//10M
  SREG->CLKMD = (9 << CLKMD_PLLMUL) | (30 << CLKMD_PLLCOUNT) | (1 << CLKMD_PLLONOFF) | (1 << CLKMD_PLLNDIV) | (1 << CLKMD_PLLSTATUS);//100M
//  SREG->CLKMD = (14 << CLKMD_PLLMUL) | (30 << CLKMD_PLLCOUNT) | (1 << CLKMD_PLLONOFF) | (1 << CLKMD_PLLNDIV) | (1 << CLKMD_PLLSTATUS);//150M
  for (start = 0; start < 10000; start ++);//等待外設(shè)上電復(fù)位正常結(jié)束
}

void SystemObj::TIMER0Init(void)
{
  TIMER0->TCR = (1 << TCR_TSS);//關(guān)閉定時器0
  TIMER0->PRD = 60000;//設(shè)置定時周期
  TIMER0->TIM = 60000;//設(shè)置定時計數(shù)器
  TIMER0->TCR &= ~(1 << TCR_TSS);//啟動定時器0
  SREG->IMR |= (1 << IMR_TINT0);//允許TINT0中斷
}

void SystemObj::TIMER1Init(void)
{
  TIMER1->TCR = (1 << TCR_TSS);//關(guān)閉定時器1
  TIMER1->PRD = 0xffff;//設(shè)置定時周期
  TIMER1->TIM = 0xffff;//設(shè)置定時計數(shù)器
//  TIMER1->TCR &= ~(1 << TCR_TSS);//啟動定時器1
//  SREG->IMR |= (1 << IMR_TINT1);//允許TINT1中斷
}

void SystemObj::EintInit(void)
{
  SREG->IMR |= (1 << IMR_INT0);//允許INT0中斷
  SREG->IMR |= (1 << IMR_INT1);//允許INT1中斷
  SREG->IMR |= (1 << IMR_INT2);//允許INT2中斷
  SREG->IMR |= (1 << IMR_INT3);//允許INT3中斷
}



LcdObj::LcdObj(void)
{
  LcdInit();
}

void LcdObj::LcdSpiSetup(void)
{
#if (ccsdebug == 0)
/*-----------------------------------------------------------
  硬件McBSP模塊配置為SPI接口
實驗?zāi)康模?br>  演練硬件McBSP模塊配置為SPI接口的應(yīng)用。
------------------------------------------------------------*/
  McBSP1->SPSA = SPCR1;
  McBSP1->SPSD = 0;
//  McBSP1->SPSD &= ~(1 << SPCR1_RRST);//禁止串口接收
  _delay_loop_(1);//延時等待
  McBSP1->SPSA = SPCR2;
  McBSP1->SPSD = 0;
//  McBSP1->SPSD &= ~(1 << SPCR2_XRST);//禁止串口發(fā)送
  _delay_loop_(1);//延時等待
  McBSP1->SPSA = SPCR1;
  McBSP1->SPSD = (0x02 << SPCR1_CLKSTP);//CLKSTP=10b
  _delay_loop_(1);//延時等待
  McBSP1->SPSA = PCR;
  McBSP1->SPSD = (1 << PCR_FSXM)  //設(shè)置FSX引腳為輸出,控制LCD12864的片選信號SS
               | (0 << PCR_FSXP)  //FSX引腳平時輸出低電平(LCD12864的片選信號SS無效)
               | (1 << PCR_CLKXM) //設(shè)置CLKX引腳為輸出
               | (1 << PCR_CLKXP);//CLKXP引腳平時輸出高電平
  _delay_loop_(1);//延時等待
  McBSP1->SPSA = SRGR1;
  McBSP1->SPSD = (0x07 << SRGR1_FWID)   //0x00~0x07~0xff
               | (0x80 << SRGR1_CLKGDV);//速率0x80
  _delay_loop_(1);//延時等待
  McBSP1->SPSA = SRGR2;
  McBSP1->SPSD = (1 << SRGR2_CLKSM);//
  _delay_loop_(1);//延時等待
  McBSP1->SPSA = RCR1;
  McBSP1->SPSD = (0x00 << RCR1_RFRLEN1);//8BIT
  _delay_loop_(1);//延時等待
  McBSP1->SPSA = XCR1;//延時等待
  McBSP1->SPSD = (0x00 << XCR1_RFRLEN1);//8BIT
  _delay_loop_(1);//延時等待
  McBSP1->SPSA = RCR2;
  McBSP1->SPSD = (0x02 << RCR2_RDATDLY);//0x01
  _delay_loop_(1);//延時等待
  McBSP1->SPSA = XCR2;
  McBSP1->SPSD = (0x02 << XCR2_RDATDLY);//0x01
  _delay_loop_(1);//延時等待
  McBSP1->SPSA = SPCR2;
  McBSP1->SPSD |= (1 << SPCR2_GRST) | (1 << SPCR2_XRST) | (1 << SPCR2_FRST);
  _delay_loop_(1);//延時等待
#else
/*-----------------------------------------------------------
  硬件McBSP模塊配置為普通IO軟件模擬SPI時序
實驗?zāi)康模?br>  演練硬件McBSP模塊配置為普通IO的應(yīng)用.以備IO緊缺時急用。
------------------------------------------------------------*/
  McBSP1->SPSA = SPCR1;
  McBSP1->SPSD = 0;
  McBSP1->SPSD &= ~(1 << SPCR1_RRST);//禁止串口接收
  McBSP1->SPSA = SPCR2;
  McBSP1->SPSD = 0;
  McBSP1->SPSD &= ~(1 << SPCR2_XRST);//禁止串口發(fā)送
 &
2樓: >>參與討論
hotpower
為何選用波特率自適應(yīng)同步字符"?"
 

http://blog.21ic.com/more.asp?NAME=hotpower&id=20789

3樓: >>參與討論
dengm
re:
"?" 的uart為                          stop bit   
      1 ----+  +--+--+--+--+--+--+     +--+--------
            |  |                 |     |
      0     +--+                 +--+--+
          start bit              |     |
                                 |時間?|

當(dāng)用較高(比正常用最高bps 還高)時接受這個信號,會怎么樣?
                                            

4樓: >>參與討論
hotpower
哈哈~~~鄧苗的文字圖不錯~~~
由于問號的精華在于三個不同的脈寬互成比例1:6:2.(不管停止位)

再高的bps也必須滿足這三者的比例關(guān)系,所以"時間?"不是問題~~~

三者的比例關(guān)系實際隱含了一種密碼校對關(guān)系~~`,三者的比例不對就休想聯(lián)機(jī)~~`
所謂"寧愿錯殺一千,也不放過一個"~~~

而且在系統(tǒng)各自的通訊協(xié)議中還需采用校驗機(jī)制,所以你的擔(dān)心是有些多余~~`

由于本程序采用軟件模擬,在進(jìn)出中斷都會產(chǎn)生時間偏移,何況我未將另一定時器TINT0關(guān)閉(為了不影響系統(tǒng)的實時和LCD的顯示及其他等程序的運行).

本程序最高BPS可達(dá)到57600,這就滿足了一般的工控通訊要求~~~~

實際上工控一般采用9600~19200

* - 本貼最后修改時間:2006-7-1 13:07:52 修改者:hotpower

5樓: >>參與討論
dengm
1:6:2, 先接收“1” + 部分“6”,
再關(guān)閉所有中斷來測量“2”的時間。

6樓: >>參與討論
boy364
雖然看不懂,我還是頂
俺也是西安出來的,見了西安人就親切

7樓: >>參與討論
hotpower
一般聯(lián)機(jī)在初始化階段,關(guān)閉所有中斷來測量后再工作很正常~~~
 
8樓: >>參與討論
開發(fā)板之家
hotpower大俠就是厲害
佩服佩服

9樓: >>參與討論
hotpower
暈水~~~什么大俠???純粹一屆布衣~~~
哈哈~~~連開發(fā)板也買不起的窮書生~~~

10樓: >>參與討論
bin2bin
剛開始學(xué)如何做,多謝
 
11樓: >>參與討論
hotpower
先掌握IO,定時和中斷這三個最基本且最重要的部分
任何MCU/ARM/DSP都應(yīng)該先掌握這些~~~

12樓: >>參與討論
gudeng614
這是C編的,有點看不懂啊
 
參與討論
昵稱:
討論內(nèi)容:
 
 
相關(guān)帖子
請問2407的SCI通信查詢發(fā)送和接收都行可進(jìn)不了中斷?(附程序)
DSP2407用仿真器仿真時和下載運行時,配置有什么不同嗎?
高速處理器與慢速外設(shè)的通信問題[虛心求教]
急!5402用串行FLASH啟動不成功
關(guān)于c6000 c語言clock()
免費注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點此進(jìn)入


Copyright © 1998-2006 udpf.com.cn 浙ICP證030469號