Skip to content

Instantly share code, notes, and snippets.

@xiupos
Last active March 20, 2017 00:42
Show Gist options
  • Save xiupos/91a1a27d1daf7a1b273f50b67093eeaf to your computer and use it in GitHub Desktop.
Save xiupos/91a1a27d1daf7a1b273f50b67093eeaf to your computer and use it in GitHub Desktop.
LPC810についていろいろメモ(3)MRT関連
// LPC810についていろいろメモ(3)MRT関連
// ha2zakura
// Lチカです
// http://ktrikms.blog.jp/archives/69744499.html
// 参考:
// http://www.nxp.com/documents/user_manual/UM10601.pdf
// http://d.hatena.ne.jp/mikkabo/20150401/1427890791
// 省略部分はメモ(1)(2)
// ___ ___
// PIO0_5 [1|O U |8] PIO0_0
// PIO0_4 [2| |7] GND
// PIO0_3 [3| |6] 3.3V
// PIO0_2 [4|_______|5] PIO0_1
#include "LPC8xx.h"
void MRT_IRQHandler(void)
// MRT割り込み
{
if ( LPC_MRT->Channel[0].STAT & (1<<0))
// MRTのステータス
// UM10601 11.6.4 Table 152.
//>0 => 1:割り込み発生
// 書き込むことで処理したことを伝える
{
LPC_MRT->Channel[0].STAT = (1<<0);
// 前述
LPC_GPIO_PORT->NOT0 |= (1<<2);
// GPIO出力を反転
// 省略
}
return;
}
int main(void) {
LPC_SYSCON->SYSAHBCLKCTRL |= (1<<7);
// clock有効化の設定...?
// 省略
LPC_SWM->PINENABLE0 = 0xffffffbfUL;
// 有効化するピンの設定...?
// 省略
LPC_GPIO_PORT->DIR0 |= (1<<2);
// GPIOの設定
// 省略
LPC_SYSCON->SYSAHBCLKCTRL |= (1<<10);
// clock有効化の設定...?
// UM10601 4.6.13 Table 30.
// 0:無効化 1:有効化
// (略)
//>10 => MRT
// (略)
LPC_SYSCON->PRESETCTRL &= ~(1<<7);
LPC_SYSCON->PRESETCTRL |= (1<<7);
// MRTのリセット...?
// UM10601 4.6.2 Table 19.
// 0:リセット(?) 1:(デフォルト)
// 0 => SPI0
// 1 => SPI1
// 2 => UARTFRG
// 3 => UART0
// 4 => UART1
// 5 => UART2
// 6 => I2C
//>7 => MRT
// 8 => SCT
// 9 => WKT
// 10 => GPIO
// 11 => FLASH
// 12 => ACMP
NVIC->ISER[0] = (0x1 << 10);
// 割り込みの有効化...?
// UM10601 3.4.1 Table 5.
// 0:(デフォルト) 1:有効化
// 0 => SPI0
// 1 => SPI1
// 3 => UART0
// 4 => UART1
// 5 => UART2
// 8 => I2C
// 9 => SCT
//>10 => MRT
// 11 => CMP
// 12 => WDT
// 13 => BOD
// 14 => FLASH
// 15 => WKT
// 24 => PININT0
// 25 => PININT1
// 26 => PININT2
// 27 => PININT3
// 28 => PININT4
// 29 => PININT5
// 30 => PININT6
// 31 => PININT7
LPC_MRT->Channel[0].CTRL = (1<<0) | (0x0<<1);
// MRTのモード設定
// UM10601 11.6.3 Table 151.
//>0 => 1:タイマーの有効
// 2:1 => >0x0:リピート
// 0x1:一回のみ
// 0x2:一回のみ(bus stall mode(?))
// Channel[x] x=0,1,2,3 MRTは4本ある
LPC_MRT->Channel[0].INTVAL = 12000000; // 12MHzなのでこれでmsミリ秒分
LPC_MRT->Channel[0].INTVAL |= 0x1UL<<31;
// 割り込みの周期の設定
// UM10601 11.6.1 Table 149.
//>30:0 => 12Mで1秒 12kで1m秒
//>31 => 強制的にreload(?)
// 現在のカウンタ値は
// LPC_MRT->Channel[0].TIMER
// の30:0までで読める
while(1){}
return 0 ;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment