音影先锋亚洲天堂网|电影世界尽头的爱完整版播放|国产 熟女 91|高清无码免费观看欧美日韩|韩国一区二区三区黄色录像|美女亚洲加勒比在线|亚洲综合网 开心五月|7x成人在线入口|成人网站免费日韩毛片区|国产黄片?一级?二级?三级

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

McBSP做普通IO之操作

作者:hotpower 欄目:DSP技術(shù)
McBSP做普通IO之操作
void SystemObj::McBSP0Init(void)
{
  McBSP0->SPSA = SPCR1;
  McBSP0->SPSD = 0;
  McBSP0->SPSD &= ~(1 << SPCR1_RRST);//禁止串口接收
  McBSP0->SPSA = SPCR2;
  McBSP0->SPSD = 0;
  McBSP0->SPSD &= ~(1 << SPCR2_XRST);//禁止串口發(fā)送
  McBSP0->SPSA = PCR;
  McBSP0->SPSD = (1 << PCR_XIOEN) | (1 << PCR_RIOEN);//設(shè)置收發(fā)為IO接口,DX輸出,DR,CLKS輸入
  McBSP0->SPSD |= (1 << PCR_FSXM) | (1 << PCR_CLKXM);//設(shè)置FSX,CLKX可做IO輸出
  McBSP0->SPSD |= (1 << PCR_FSRM) | (1 << PCR_CLKRM);//設(shè)置FSR,CLKR可做IO輸出
}

void SystemObj::McBSP1Init(void)
{
  McBSP1->SPSA = SPCR1;
  McBSP1->SPSD = 0;
  McBSP1->SPSD &= ~(1 << SPCR1_RRST);//禁止串口接收
  McBSP1->SPSA = SPCR2;
  McBSP1->SPSD = 0;
  McBSP1->SPSD &= ~(1 << SPCR2_XRST);//禁止串口發(fā)送
  McBSP1->SPSA = PCR;
  McBSP1->SPSD = (1 << PCR_XIOEN) | (1 << PCR_RIOEN);//設(shè)置收發(fā)為IO接口,DX輸出,DR,CLKS輸入
  McBSP1->SPSD |= (1 << PCR_FSXM) | (1 << PCR_CLKXM);//設(shè)置FSX,CLKX可做IO輸出
  McBSP1->SPSD |= (1 << PCR_FSRM) | (1 << PCR_CLKRM);//設(shè)置FSR,CLKR可做IO輸出
}   


interrupt void Timer0Isr() {
static int count = 0;
static int ledcount = 0;
  count ++;
  if (count >= 4 * 250) {
    count = 0;
    ::IOXF = !::IOXF;//郁悶~~~中斷中ST1被保護~~~
    McBSP0->SPSA = PCR;
    McBSP0->SPSD ^= (1 << PCR_DX_STAT);//取碊X信號
//    McBSP0->SPSA = PCR;
    McBSP0->SPSD ^= (1 << PCR_CLKXP);//取反CLKX信號
//    McBSP0->SPSA = PCR;
    McBSP0->SPSD ^= (1 << PCR_FSXP);//取反FSX信號

//    McBSP0->SPSA = PCR;
    McBSP0->SPSD ^= (1 << PCR_CLKRP);//取反CLKR信號
//    McBSP0->SPSA = PCR;
    McBSP0->SPSD ^= (1 << PCR_FSRP);//取反FSR信號

    Led.LedDisplay(ledcount & 0x0f);
    ledcount ++;


    McBSP1->SPSA = PCR;
    McBSP1->SPSD ^= (1 << PCR_DX_STAT);//取反DX信號
//    McBSP1->SPSA = PCR;
    McBSP1->SPSD ^= (1 << PCR_CLKXP);//取反CLKX信號
//    McBSP1->SPSA = PCR;
    McBSP1->SPSD ^= (1 << PCR_FSXP);//取反FSX信號


//    McBSP1->SPSA = PCR;
    McBSP1->SPSD ^= (1 << PCR_CLKRP);//取反CLKR信號
//    McBSP1->SPSA = PCR;
    McBSP1->SPSD ^= (1 << PCR_FSRP);//取反FSR信號

  }
}


[DSP菜鳥實驗田]

2樓: >>參與討論
hotpower
McBSP做普通IO再模擬SPI控制595驅(qū)動LED
void LedObj::LedDisplay(unsigned CHAR cData)
{
static const unsigned CHAR LedTab[] =
{
  ~LedChar0,
  ~LedChar1,
  ~LedChar2,
  ~LedChar3,
  ~LedChar4,
  ~LedChar5,
  ~LedChar6,
  ~LedChar7,
  ~LedChar8,
  ~LedChar9,
  ~LedCharA,
  ~LedCharB,
  ~LedCharC,
  ~LedCharD,
  ~LedCharE,
  ~LedCharF
};
unsigned int i;
  cData = LedTab[cData & 0xff];
  McBSP1->SPSA = PCR;
  for (i = 0; i < 8; i ++) {
    McBSP1->SPSD &= ~(1 << PCR_CLKXP);//CLKX信號=0
//    LCDPORT->IOCLR = (1 << LCDSCK);
    if (cData & 0x80) {//MSB最高位為1時
      McBSP1->SPSD |= (1 << PCR_DX_STAT);//DX信號=1
//      LCDPORT->IOSET = (1 << LCDSID);
    }
    else {
      McBSP1->SPSD &= ~(1 << PCR_DX_STAT);//DX信號=0
//      LCDPORT->IOCLR = (1 << LCDSID);
    }
    cData <<= 1;
    McBSP1->SPSD |= (1 << PCR_CLKXP);//CLKX信號=1
//    LCDPORT->IOSET = (1 << LCDSCK);
  }    
  McBSP1->SPSD &= ~(1 << PCR_FSXP);//FSX信號=0
  __nop();
  McBSP1->SPSD |= (1 << PCR_FSXP);//FSX信號=1
}


dsp串口模擬io之spi接口led顯示完整代碼

3樓: >>參與討論
iversonma
這樣豈不多次一舉~
直接配置成spi不就成了~
配置成gpio還閑速度不夠慢?

hotpower大叔??

4樓: >>參與討論
hotpower
哈哈~~~這主要是演練普通IO之本領(lǐng)~~~
5402的IO有時可能不夠用而串口只需1個時,就派上用場了~~~

哈哈~~~我再菜也是明白這個道理的~~~

5樓: >>參與討論
computer00
演練IO我一般只用流水燈~~~~~~~然后再用示波器來個最快速度測試
 
6樓: >>參與討論
hotpower
哈哈,剛好接入ARM的開發(fā)板上的595驅(qū)動LED~~~
沒看見是將LPC2132的模擬SPI改編過來的吧???

LED數(shù)碼顯示'0','1',...'A',...'F'.也不次于流水燈吧~~~

起碼也能熟悉SPI協(xié)議~~~

7樓: >>參與討論
iversonma
高手之間的對話~~
 
8樓: >>參與討論
hotpower
配置硬件SPI
void SystemObj::McBSP1Init(void)//SPI配置
{
  McBSP1->SPSA = SPCR1;
  McBSP1->SPSD = 0;
//  McBSP1->SPSD &= ~(1 << SPCR1_RRST);//禁止串口接收
  __nop();
  __nop();
  McBSP1->SPSA = SPCR2;
  McBSP1->SPSD = 0;
//  McBSP1->SPSD &= ~(1 << SPCR2_XRST);//禁止串口發(fā)送
  __nop();
  __nop();
  McBSP1->SPSA = SPCR1;
  McBSP1->SPSD = (0x03 << SPCR1_CLKSTP);//CLKSTP=11b
  __nop();
  __nop();
  McBSP1->SPSA = PCR;
//  McBSP1->SPSD = (1 << PCR_FSXM) | (1 << PCR_CLKXM)\
//               | (1 << PCR_FSXP) | (1 << PCR_CLKXP);//CLKXP=1,SS=1
  McBSP1->SPSD = (1 << PCR_FSXM) | (1 << PCR_CLKXM)\
                 | (0 << PCR_FSXP) | (1 << PCR_CLKXP);//CLKXP=1,SS=0
  __nop();
  __nop();
  McBSP1->SPSA = SRGR1;
  McBSP1->SPSD = (0x07 << SRGR1_FWID) | (0x80 << SRGR1_CLKGDV);
  __nop();
  __nop();
  McBSP1->SPSA = SRGR2;
  McBSP1->SPSD = (1 << SRGR2_CLKSM);
  __nop();
  __nop();
  McBSP1->SPSA = RCR1;
  McBSP1->SPSD = (0x00 << RCR1_RFRLEN1);//8BIT
  __nop();
  __nop();
  McBSP1->SPSA = XCR1;
  McBSP1->SPSD = (0x00 << XCR1_RFRLEN1);//BIT
  __nop();
  __nop();
  McBSP1->SPSA = RCR2;
  McBSP1->SPSD = (0x01 << RCR2_RDATDLY);
  __nop();
  __nop();
  McBSP1->SPSA = XCR2;
  McBSP1->SPSD = (0x01 << XCR2_RDATDLY);
  __nop();
  __nop();
  McBSP1->SPSA = SPCR2;
  McBSP1->SPSD |= (1 << SPCR2_GRST) | (1 << SPCR2_XRST) | (1 << SPCR2_FRST);
  __nop();
  __nop();
}   


void LedObj::LedDisplay(unsigned CHAR cData)
{
static const unsigned CHAR LedTab[] =
{
  ~LedChar0,
  ~LedChar1,
  ~LedChar2,
  ~LedChar3,
  ~LedChar4,
  ~LedChar5,
  ~LedChar6,
  ~LedChar7,
  ~LedChar8,
  ~LedChar9,
  ~LedCharA,
  ~LedCharB,
  ~LedCharC,
  ~LedCharD,
  ~LedCharE,
  ~LedCharF
};

  cData = LedTab[cData & 0xff];
  McBSP1->DXR1 = cData & 0xff;//向595發(fā)送串行數(shù)據(jù)
  __nop();
  __nop();

  McBSP1->SPSA = SPCR2;
  while((McBSP1->SPSD & (1 << SPCR2_XRDY)) == 0) {
    __nop();
    __nop();
  }
}


參與討論
昵稱:
討論內(nèi)容:
 
 
相關(guān)帖子
求教RTL8139的問題
各位大蝦,幫幫忙!
焊接仿真器,練習(xí)自己動手能力-軟件硬件一起玩
求助: 如何做DSP菜鳥???
寫片外RAM的問題
免費注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點此進入


Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號