⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ms_frame.m

📁 MatLab图像传感器网络仿真平台WiSNAP
💻 M
字号:
function imager = ms_frame(port);
%Mouse sensor frame capture.
%   IMAGER = MS_FRAME(PORT);
%
%   Input Parameters:
%   ================
%
%      port --------------> Parallel port base address decimal (positive integer).
%
%   Output Parameters:
%   =================
%
%      imager ------------> Image array, 30x30 pixels, 6 bit grayscale (30x30x1 array).
%
%   See also MS_POWER, MS_RESET.

% Stephan Hengstler
% Stanford Wireless Sensor Networks Lab
% January 07, 2005
%
% Last modified: 01-21-2005
% .MEX C Source: ms_frame.c

%****************************** Mouse Sensor Frame Capture ********************************

% define mouse sensor registers
MS_REG_FRAME_CAPTURE	= hex2dec('13');  % Register: Frame capture.
MS_REG_PIXEL_BURST	= hex2dec('40');  % Register: Pixel burst.

% define mouse sensor parameters
MS_IMG_WIDTH         = 30;             % Image array: Width.
MS_IMG_HEIGHT        = 30;             % Image array: Height.

% define port addresses
DATA_PORT   			= port;
STAT_PORT   			= DATA_PORT + 1;
CTRL_PORT   			= DATA_PORT + 2;

% define signal bit masks
MASK_NCS             = 2;
MASK_NPD             = 3;
MASK_MOSI            = 1;
MASK_MISO            = 8;
MASK_RESET           = 4;
MASK_SCLK            = 1;

% trigger frame capture
status      = spi_write_register(port,MS_REG_FRAME_CAPTURE,hex2dec('83'));

% insert delay per data sheet
pause(3e-6)

% set direction out
ctrl_value  = inp32(CTRL_PORT);
ctrl_value  = bitset(ctrl_value,6,0);

% raise chip select
ctrl_value     = bitset(ctrl_value,MASK_NCS,1);
out32(CTRL_PORT,ctrl_value)

% get data value
data_value	= inp32(DATA_PORT);

% address cycle
for bit = 8:-1:1

   % clear sclk
   ctrl_value     = bitset(ctrl_value,MASK_SCLK,1);
   out32(CTRL_PORT,ctrl_value)

   % place bit on mosi
   data_value		= bitset(data_value,MASK_MOSI,bitget(MS_REG_PIXEL_BURST,bit));
   out32(DATA_PORT,data_value)

   % raise sclk
   ctrl_value     = bitset(ctrl_value,MASK_SCLK,0);
   out32(CTRL_PORT,ctrl_value)

end

% insert delay per data sheet
pause(50e-6)

% pixel burst read
for x = 1:MS_IMG_WIDTH
   for y = 1:MS_IMG_HEIGHT
      
      % data cycle
      value			= 0;
      for bit = 8:-1:1
         
         % clear sclk
         ctrl_value     = bitset(ctrl_value,MASK_SCLK,1);
         out32(CTRL_PORT,ctrl_value)
         
         % sense bit from miso
         dummy 			= not(bitget(inp32(STAT_PORT),MASK_MISO));
         value				= bitset(value,bit,dummy);
         
         % raise sclk
         ctrl_value     = bitset(ctrl_value,MASK_SCLK,0);
         out32(CTRL_PORT,ctrl_value)
         
      end

      % mask pixel to 6 bit
      pixel          = bitand(value,63);
      
      % store pixel in image array
      imager(x,y)    = pixel;

   end
end

% clear chip select
ctrl_value     = bitset(ctrl_value,MASK_NCS,0);
out32(CTRL_PORT,ctrl_value)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -