|
328D的SPI可以用了。不过SSOP20 的88D的问题貌似不小。
1.UI生成的引脚方向是反的?
2. 看DATASHEET(1.0.3版)里面的引脚 应该是 // SCK,MISO,MOSI,SS = PB[5,4,3,0] 吧, 但 生成的 DrvSPI_Init()里面却是 // SCK,MISO,MOSI,SS = PB[5,4,3,1] , 到底哪个正确的? SPSS是PB0还是PB1 我试着把SPSS引脚改成PB0,不过也不行。SPI不通。
相关的改动如下,不知道还漏了哪里。
void DrvSPI_Init(void)
{
// SS on PB1
PMXCR = 0x80;
PMXCR |= 0x04;
// SCK,MISO,MOSI,SS = PB[5,4,3,1]
// SCK,MISO,MOSI,SS = PB[5,4,3,0] // ????????????????????????????????????
if(SPI_SPIM == E_SPI_MASTER)
{
// SS = 1
//PORTB = (PORTB & 0xc5) | 0x2;
PORTB = (PORTB & 0xc6) | 0x1;
// SCK,MISO,MOSI,SS = O,I,O,O
//DDRB = (DDRB & 0xc5) | 0x2a;
DDRB = (DDRB & 0xc6) | 0x29;
}
else
{
//PORTB = (PORTB & 0xc5);
PORTB = (PORTB & 0xc6);
// SCK,MISO,MOSI,SS = O,I,O,O
//DDRB = (DDRB & 0xc5) | 0x10;
DDRB = (DDRB & 0xc6) | 0x10;
}
//
SPCR = (SPI_SPIIEN << SPIE) | (SPI_SPIDORD << DORD) | (SPI_SPITYPE << CPHA) | \
(SPI_SPIM << MSTR) | ((SPI_SPICLK & 0x3) << SPR0);
//
SPSR = (SPI_SPICLK >> 2) & 1;
//
SPCR |= (1 << SPE);
}
/** SS=HIGH */
#define DrvSPI_SPSSOff() do { __ASM("sbi 0x05, 0"); } while(0)
/** SS=LOW */
#define DRVSPI_SPSSOn() do { __ASM("cbi 0x05, 0"); } while(0)
3. 硬件SPI不通,本想先改成软件SPI, 在UI界面配置引脚时发现PB3没法修改! |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
|