C6747利用McASP发送中断方式完成音频输入信号的直接输出 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站
点击跳转“创龙科技服务通”

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 6389|回复: 1
打印 上一主题 下一主题

C6747利用McASP发送中断方式完成音频输入信号的直接输出

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
1 c8 Y) q6 }" N' n: Z0 m# P1 ^/ P2 Vmain文件:
8 V2 J, `; ]- e$ w# dinterrupt void interrupt4(void)  - |4 |6 Q' r2 k, Q! p
{
6 L5 `) }5 K' ^! N0 x  Uint32 sample;; Q2 l, Z, r7 }9 T) t. s# C- @, v
4 h; C4 _  }1 L9 w* i6 c
  sample = input_sample(); // read L + R samples from ADC3 W! I7 d6 `0 W  Z! I3 e
  output_sample(sample);   // write L + R samples to DAC
+ @3 E& K4 z6 `: h& D5 d7 T  return;
9 r( _8 W3 i# k}, t; u6 Q9 T0 d9 T( O+ G

# G( Z4 \: A' Nint main( void )2 D# A( d) A7 ?! u9 U4 d% t
{
6 f4 P: m& `: c# H
) n% ]+ _) z4 ]    /* Initialize BSL */
. a* ~% d0 d/ D/ w    EVMC6747_init( );
1 I9 `' s% C8 v3 l# o: q        /* Call evmc6747_intr function */8 [2 r3 i9 j7 P8 {' A7 a
    aic3106_init( );2 G$ i6 a1 B0 x8 i7 `- R
        while(1);
+ a* e) m$ e  g+ p- w' j, l1 a1 z$ M: ^}7 Y9 m* w$ k8 V- d  P& c  _
1 r- X" Z/ ], y; N4 u& c

" D4 [7 p! V( s; H/ Iaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
2 N, X9 g: N' d; o. w7 ~3 S! ?& Q/* Initialize MCASP1 */
6 ^6 {5 s/ n, L  v4 V    mcasp = &MCASP_MODULE_1;
% k" T& n3 r& [0 q5 F8 F0 D4 J0 ?    mcasp->regs->GBLCTL  = 0;       // Reset
4 G0 F- [0 W! L0 i, [! m    mcasp->regs->RGBLCTL = 0;       // Reset RX# ?/ l; C! z( @0 ~0 w0 C
    mcasp->regs->XGBLCTL = 0;       // Reset TX
6 J  V- ?. x/ `/ C( T) q4 V    mcasp->regs->PWRDEMU = 1;       // Free-running; d1 |% ^% S3 s2 X) B3 ?
   // configure McASP0 receive registers
+ @4 K9 V4 P& }$ R8 ?6 R. g    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
" o1 I) \  U. T- B( ]    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
" y) j/ ^. h$ D* Z    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word! ~" E; k. s# d" o6 G
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
1 k% t4 B" r/ A    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side); I0 E& f( a& u; E+ {
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,11 w7 j& V+ ]: d( d2 P) t
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
& d( _, V/ Z' z5 G* K    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
$ s! \: e& B1 a3 a
4 l9 x) w2 O" W9 {' D" B    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used6 m% j% i, K! w6 Z3 ?/ W
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus/ @* e  J0 @; h# ^. C# i
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
- {* K% e& l# X- k    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
/ W) O' n' ?) B! |8 z- z% \1 x    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK0 y& N: T9 ^' Q6 d
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
' Q  u# Z: h  R- C1 R4 |4 t    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit/ }- x* E0 ^  E4 w: T
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256' e4 w. a* T9 E" E
$ F0 O( J$ x0 d) N, \& [6 I- E9 m
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
$ S. x/ W1 x5 a    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
: W5 ^$ D1 H! [    mcasp->regs->PFUNC      = 0;          // All MCASPs
% m2 g: \% S  N    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1: L+ @) \* s  k" i

2 f5 d# A/ w: p! l    mcasp->regs->DITCTL     = 0x00000000; // Not used0 D$ I" s' w; V5 j/ K/ h
    mcasp->regs->DLBCTL     = 0x00000000; // Not used9 K! }+ |/ V! k; N4 z- L# W5 L" Y
    mcasp->regs->AMUTE      = 0x00000000; // Not used
* g9 I& c# L! o/ a0 Z/ F! D
, m, H5 o+ ^" N) l5 p2 d7 e/* Starting sections of the McASP*/
6 i( {. C2 B6 Z# s( r    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;   V; a2 \. r% |  w  R/ i
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
& t5 m" t3 Y+ j6 [1 c) Z    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; : A1 K4 d, Z+ A+ M1 b0 c
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
7 y0 Y; g2 Q1 l. a! A) k5 F! s; Y5 ]8 Z4 ]7 u% m' K+ m# c% A" V8 z
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; ) X8 M9 L8 z' |7 G/ j5 k/ g. {
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );* I% t: m% m6 i! |
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
5 Q# _: M# G* I* s0 S' \: t8 g    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
& O; J5 n' L1 X6 c$ p7 x4 g! l6 j5 Z# U& e
    mcasp->regs->XSTAT = 0x0000ffff; 9 g7 `9 U! j3 ^6 S
    mcasp->regs->RSTAT = 0x0000ffff;
% C1 ]) H7 I  Y- j6 i5 C: y" w' `, D. L
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
' V% z( Q# |4 P9 j9 ~- k6 \    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );3 e. p- y% X! U2 F' h/ v
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
; ]. `, b9 [$ g8 M1 S# Q" [2 @$ u    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
/ v  ^2 z( d6 [. T5 q0 Q6 c% E, z9 D* d! d
    /* Write a 0, so that no underrun occurs after releasing the state machine */
, e1 A  ^5 v, r* p3 H    mcasp->regs->XBUF5 = 0;
8 G/ R5 `2 X) d( a; P- _  n    mcasp->regs->RBUF0 = 0;
! B) q. e! h6 Y/ M! i
  T+ n5 f- y1 w! }: `, s, b    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; ( a  y  |( U! }7 r" o/ W! p  }3 Z4 g
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );' {1 v* P. ?* P. A0 u
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 9 t! c9 l, X: X
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );$ L/ b; o  @, B9 B+ J! c1 D

$ p. n4 `& |' n  S$ _$ L& g    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
6 s9 a/ s2 E0 W    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );) K6 p8 T/ Y6 m' p
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; * ]) ^0 \$ M2 l
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
% w2 H8 [8 V! j3 }. N. c9 t7 o/ S5 U3 k# u9 |5 J, y
    CSR = 0x0000;) ]# Y% t( m* ?! T& ?/ U
    INTC_INTMUX1 = 0x3d;
8 L6 v4 l- g& S& U    ISTP = (unsigned int)vectors;1 e1 [9 L" s8 n! j1 H/ ?
    ICR = 0xFFF0;  
; m0 j2 P% l7 x3 d! l; T    IER |= 0x12;  $ I" S5 V% y# r( P$ f
    CSR |= 0x01;  ; l+ q( a; S7 q, `

: {1 E. W. R! g7 Z9 A3 D! ]; c4 _/ O1 _

# w" L8 u5 H& w: {1 Q还有就是两个输入输出函数:
$ u) r( X8 Z7 R' Y* V0 E: Dvoid output_sample(Int32 out_data)
& @" Z, m- F+ A) m7 a- K{
1 A/ c* R' z' s  AIC31_data.uint = out_data;  
( J/ B' p$ y- _; p2 E$ @  MCASP1_XBUF5_32BIT = AIC31_data.uint;  [" ~  A! n& j: y$ _" L  M# ?( C4 _
}* c( T* z* N9 m: [  u

9 A! M% U3 s4 a$ u2 M# BInt32 input_sample(void)1 d( i+ l) D1 E
{  ( r& ?# N* u! F/ j4 y* a" h
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
1 p( x* o7 [+ Q* t  return (AIC31_data.uint);( X" A  A8 x6 J1 x+ k9 y( x- e' g
}1 N+ i" T  X! g3 y6 k5 h4 P) k
0 P, \! Y: M4 v: ?9 R3 Q; s$ o
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

3

主题

852

帖子

3538

积分

创龙

Rank: 8Rank: 8

积分
3538
沙发
发表于 2016-3-16 11:55:59 | 只看该作者
可以参看创龙提供的例程:AUDIO_LINE_OUT_INTR——Line Out 音频输出(中断方式)
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

点击跳转“创龙科技服务通”

QQ|手机版|小黑屋|嵌入式开发者社区 ( 粤ICP备15055271号

GMT+8, 2026-2-22 14:00 , Processed in 0.042162 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

快速回复 返回顶部 返回列表