📄 main.c
字号:
#include "msp430x20x3.h"
void delay(void)
{
volatile unsigned int i;
volatile unsigned int j;
for (i = 0; i < 3; ++i)
for (j = 16000; j; j--)
;
}
const unsigned char SS_n_bit = 0x10; // P1.4 is SS_n
void init_spi(void)
{
P1OUT |= SS_n_bit;
P1DIR |= SS_n_bit;
USICTL0 = USISWRST; // Disable SPI during config.
USICTL0 |= USIPE7 | USIPE6 | USIPE5 | USIOE | USIMST;
USICTL1 = 0;
// USICKCTL = USICKPL; // clock phase active low (experiment)
USICKCTL = USIDIV_1 + USISSEL_2; // /2 SMCLK
USICTL0 &= ~USISWRST; // USI released for operation
}
// Dumb polling method to send a character.
void send_spi(unsigned char c)
{
// Dummy read to clear buffer (slau144c.pdf p. 11-7)
volatile unsigned char receive = USISRL;
// Assert SS_n.
P1OUT &= ~SS_n_bit;
USISRL = c;
USICNT = 8;
// Wait for the data to be transmitted...
while ((USICTL1 & USIIFG) == 0);
// ... and deassert SS_n.
P1OUT |= SS_n_bit;
}
void send_spi_string(unsigned char* p)
{
while (*p)
{
send_spi(*p);
p++;
}
}
void main(void)
{
unsigned char msg[] = "Hello from the f2013's SPI master! ";
unsigned char digit = '0';
unsigned char cr = '\n';
volatile int i = 50;
WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer
init_spi();
while (i-- > 0)
{
send_spi_string(msg);
digit++;
if (digit > '9') digit = '0';
send_spi(digit);
send_spi(cr);
delay();
}
// Terminate the nios2-terminal session.
send_spi_string("\nGoodbye.\n\n");
send_spi('\004');
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -