|
|||||||||||
| 技術(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ù) |
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信號 } } |
| 2樓: | >>參與討論 |
| 作者: hotpower 于 2006/6/20 20:20:00 發(fā)布:
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 于 2006/6/21 11:06:00 發(fā)布:
這樣豈不多次一舉~ 直接配置成spi不就成了~ 配置成gpio還閑速度不夠慢? hotpower大叔?? |
|
| 4樓: | >>參與討論 |
| 作者: hotpower 于 2006/6/21 20:22:00 發(fā)布:
哈哈~~~這主要是演練普通IO之本領(lǐng)~~~ 5402的IO有時可能不夠用而串口只需1個時,就派上用場了~~~ 哈哈~~~我再菜也是明白這個道理的~~~ |
|
| 5樓: | >>參與討論 |
| 作者: computer00 于 2006/6/21 20:39:00 發(fā)布:
演練IO我一般只用流水燈~~~~~~~然后再用示波器來個最快速度測試 |
|
| 6樓: | >>參與討論 |
| 作者: hotpower 于 2006/6/21 20:49:00 發(fā)布:
哈哈,剛好接入ARM的開發(fā)板上的595驅(qū)動LED~~~ 沒看見是將LPC2132的模擬SPI改編過來的吧??? LED數(shù)碼顯示'0','1',...'A',...'F'.也不次于流水燈吧~~~ 起碼也能熟悉SPI協(xié)議~~~ |
|
| 7樓: | >>參與討論 |
| 作者: iversonma 于 2006/6/22 8:54:00 發(fā)布:
高手之間的對話~~ |
|
| 8樓: | >>參與討論 |
| 作者: hotpower 于 2006/6/22 21:14:00 發(fā)布:
配置硬件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(); } } |
|
|
|
| 免費注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點此進入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號 |