📄 iar-
字号:
switch (ulRCC & SYSCTL_RCC_OSCSRC_MASK) { /* 获取基本时钟速率 */
/* 主时钟模式 */
case SYSCTL_RCC_OSCSRC_MAIN:
ulClk = g_pulXtals[((ulRCC & SYSCTL_RCC_XTAL_MASK) >>
SYSCTL_RCC_XTAL_SHIFT) -
(SYSCTL_RCC_XTAL_3_57MHZ >>
SYSCTL_RCC_XTAL_SHIFT)];
break;
/* 内部时钟 */
case SYSCTL_RCC_OSCSRC_INT:
ulClk = 15000000;
break;
/* 内部时钟的/4 */
case SYSCTL_RCC_OSCSRC_INT4:
ulClk = 15000000 / 4;
break;
default:
return(0);
}
/* 使用PLL倍频的情况 */
if (!(ulRCC & SYSCTL_RCC_BYPASS)) {
/* 获取PLL的配置值 */
ulPLL = HWREG(SYSCTL_PLLCFG);
ulClk = ((ulClk * (((ulPLL & SYSCTL_PLLCFG_OD_MASK) >>
SYSCTL_PLLCFG_F_SHIFT) + 2)) /
(((ulPLL & SYSCTL_PLLCFG_R_MASK) >>
SYSCTL_PLLCFG_R_SHIFT) + 2));
/* 2分频 */
if (ulPLL & SYSCTL_PLLCFG_OD_2) {
ulClk /= 2;
}
/* 4分频 */
if (ulPLL & SYSCTL_PLLCFG_OD_4) {
ulClk /= 4;
}
}
if (ulRCC & SYSCTL_RCC_USE_SYSDIV) {
/* 调整时钟 */
ulClk /= ((ulRCC & SYSCTL_RCC_SYSDIV_MASK) >>
SYSCTL_RCC_SYSDIV_SHIFT) + 1;
}
return(ulClk);
}
/*********************************************************************************************************
** Function name: main
**
** Descriptions: 设置SSI,并从SPI接口输出0-F的字模数据到数码管上显示
**
** input parameters: NONE
** output parameters: NONE
**
** Returned value: NONE
**
** Created by: Zhao shimin
** Created Date: 2007/09/16
**--------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
**--------------------------------------------------------------------------------------------------------
*********************************************************************************************************/
int main(void)
{
unsigned long ulMaxBitRate;
unsigned long ulPreDiv;
unsigned long ulSCR;
unsigned long ulClock;
unsigned char i, j;
unsigned long rec[16];
HWREG(SYSCTL_RCGC1) |= SYSCTL_PERIPH_SSI & 0x0fffffff; /* 使能 SSI */
HWREG(SYSCTL_RCGC2) |= SYSCTL_PERIPH_GPIOA & 0x0fffffff; /* 使能 GPIO A 口 */
HWREG(SYSCTL_RCGC2) |= SYSCTL_PERIPH_GPIOB & 0x0fffffff;
HWREG(SSI_BASE + SSI_O_CR1) = 0; /* 配置 SSI 为主模式 */
ulClock = SysCtlClockGet();
ulMaxBitRate = ulClock / BitRate;
ulPreDiv = 0;
do {
ulPreDiv += 2;
ulSCR = (ulMaxBitRate / ulPreDiv) - 1;
} while (ulSCR > 255);
HWREG(SSI_BASE + SSI_O_CPSR) = ulPreDiv;
/* 设置 SSI 传输协议和时钟速率。 */
HWREG(SSI_BASE + SSI_O_CR0) = ((ulSCR << 8) | (SSI_FRF_MOTO_MODE_0 << 6) |
(SSI_FRF_MOTO_MODE_0 & SSI_CR0_FRF_MASK) | (DataWidth - 1));
HWREG(SSI_BASE + SSI_O_CR1) |= SSI_CR1_SSE; /* 使能 SSI */
/* 设定 GPIO A 2~5 引脚为使用外设功能 */
HWREG(GPIO_PORTA_BASE + GPIO_O_AFSEL) |= (GPIO_PIN_2 | GPIO_PIN_3 | GPIO_PIN_4 | GPIO_PIN_5);
HWREG(GPIO_PORTA_BASE + GPIO_O_ODR) &= ~(GPIO_PIN_2 | GPIO_PIN_3 | GPIO_PIN_4 | GPIO_PIN_5);
HWREG(GPIO_PORTA_BASE + GPIO_O_DEN) |= (GPIO_PIN_2 | GPIO_PIN_3 | GPIO_PIN_4 | GPIO_PIN_5);
/* 设置GPIO B 2~5引脚为输出口,输出到LED1~LED4 */
HWREG(GPIO_PORTB_BASE + GPIO_O_DIR) |= (GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3);
HWREG(GPIO_PORTB_BASE + GPIO_O_AFSEL) &= ~(GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3);
HWREG(GPIO_PORTB_BASE + GPIO_O_DEN) |= (GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3);
while (1) {
/* 循环输出 0~F 的字模 */
for (i = 0; i < 16; i++) {
while (!(HWREG(SSI_BASE + SSI_O_SR) & SSI_SR_TNF)) {
;
}
HWREG(SSI_BASE + SSI_O_DR) = DISP_TAB[i]; /* 向SSI写数据 */
delay(1000);
while (!(HWREG(SSI_BASE + SSI_O_SR) & SSI_SR_RNE)) {
;
}
rec[i] = HWREG(SSI_BASE + SSI_O_DR);
for (j = 0; j < 16; j++) {
if (DISP_TAB[j] == rec[i]) {
/* 用独立的LED输出相应的16进制 */
HWREG(GPIO_PORTB_BASE +
(GPIO_O_DATA + ((GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3) << 2)))= ~j;
break;
}
}
delay(600000);
}
}
}
/*********************************************************************************************************
END FILE
*********************************************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -