ちょっと便利: LPC系のUARTの分数分周器の設定を出すスクリプト
便利な機能がくっついてます。
んでも、これ使いどころが難しいので
PCLKと目標ボーレートを入れると
自動的にヨサゲな候補値を探してくるスクリプトを去年ぐらいに書きました。
さあつかえ
#copyright 2012 inanzu / Z product
#licensed by CC-BY http://creativecommons.org/licenses/by/2.1/jp/legalcode
from math import *
PCLK = float(raw_input('PCLK[Hz]:'))
BAUDRATE = float(raw_input('Desired baudrate[bps]:'))
divrate = PCLK/(16.0*BAUDRATE)
baudset = []
for frac in range(1,15,1):
for div in range(frac):
dl = (divrate * float(frac))/(float(frac+div))
dl_int = floor(dl)
# print "frac %d div%d DL %f6 DLint %d \n" % (frac, div, dl, dl_int)
clk = PCLK/(16.0*dl_int*(1.0+float(div)/float(frac)))
errRate = 100*(clk-BAUDRATE)/BAUDRATE
# print "Clock:%f error:%f \n" % (clk,errRate)
baudset.append((clk, int(dl_int),frac,div,errRate))
baudlist = sorted(baudset, key=lambda x:fabs(x[4]), reverse=False)
print "freq:%f2 DL:%d frac:%d div:%d ErrorRate(%%):%f6" % baudlist[0]
DL = baudlist[0][1]
DLM = DL / 256
DLL = DL % 256
FDR = baudlist[0][2] << 4 | baudlist[0][3]
print "DLM %s DLL %s FDR %s" % (hex(DLM),hex(DLL),hex(FDR))
print "freq:%f2 DL:%d frac:%d div:%d ErrorRate(%%):%f6" % baudlist[1]
print "freq:%f2 DL:%d frac:%d div:%d ErrorRate(%%):%f6" % baudlist[2]