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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
  {% ~& O4 n" S+ k( _. Cmain文件:
; h4 P/ i2 J, {, K. n: Dinterrupt void interrupt4(void)  
1 H* E. |6 s5 N+ Q6 |- I{( r2 i0 q+ ~- K
  Uint32 sample;" x: _# v; H# ~3 M

6 F9 l& v! ^! `! I  sample = input_sample(); // read L + R samples from ADC6 I9 t1 e5 Q, ^* c8 c
  output_sample(sample);   // write L + R samples to DAC   P& ?; H" ]2 b) u, ?4 w
  return;
  Q, E; Z" A( f, ?% R}! ?9 b1 K0 Z9 h1 e4 q$ e6 H( d

- A; {+ D# p) \' a  yint main( void )& E  g. T! b' [% P3 d4 @
{. a$ D9 ^7 L0 `
. o: S) r) X' `0 q' a! Z  d0 X
    /* Initialize BSL */
7 u1 h; Y) v5 j    EVMC6747_init( );
( q9 k% l7 Z1 u, {, e; m% }1 M        /* Call evmc6747_intr function */
0 y  ~, S6 ^1 {$ u7 Z- U, v    aic3106_init( );+ ^! E5 W/ p' H3 E7 q- n
        while(1);
* x- ^" L9 g3 v/ v8 C% H}4 i6 e: `1 f, n9 ^
2 B9 C2 S( V) }4 D8 k* s& u
* E1 D  x: k" `- U' q+ |
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题/ K8 H/ U6 x* B3 ?9 C
/* Initialize MCASP1 */
/ R1 K+ Q% Y0 A" L    mcasp = &MCASP_MODULE_1;+ E' M8 i7 k% }) R
    mcasp->regs->GBLCTL  = 0;       // Reset* I! f3 u0 c" ]7 b
    mcasp->regs->RGBLCTL = 0;       // Reset RX
% |) A& u/ G' ]. A) g# v/ n7 D3 s    mcasp->regs->XGBLCTL = 0;       // Reset TX
5 p9 k& u1 |+ G* {! C) ~8 I# @    mcasp->regs->PWRDEMU = 1;       // Free-running" A0 E" C( o  p  [1 j
   // configure McASP0 receive registers2 P: v/ S" z2 F; E/ y& Q5 o
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used% E( G+ \5 l& J$ l; B; J1 F
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus+ q: `/ U; k8 z$ l1 g* @9 S% k
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word9 u! n1 L# Y- f  \0 A2 w1 B% z7 `
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
; r( B4 s' n3 h( x    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
% U1 F' T9 I) U. \: b( R    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
3 Q* O! e+ m" w3 D1 d    mcasp->regs->RINTCTL    = 0x00000000; // Not used: z! C6 P4 D5 V
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256! y! F9 I2 s# S1 S! k
) {8 C) E0 {1 q3 L
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
" F+ c4 f/ s# t+ Y5 q2 _  m: {    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus( U* ~6 u, H8 d) C6 L' q1 Z
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
  r- T$ u" i: S; x$ M    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
3 b# j3 t4 ]6 A2 \2 N    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
; ^6 b( D& R3 C' y: a    mcasp->regs->XTDM       = 0x00000003; // Slots 0,12 i6 x) l9 w6 z3 ]- I+ X
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
) Q- _" T+ H! R; S! {/ o% d, _    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
9 D% a, ~2 u' C4 {9 U. R
- r% B. m! |2 O  d3 H1 k    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN2 E/ Q4 @& g5 e& }* x, ?+ \: T
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT1 r  Z' \3 A3 _% m# ?
    mcasp->regs->PFUNC      = 0;          // All MCASPs+ J% A. K- O2 d% K
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1( N; d2 U; U; A/ p6 j* n" }& E& {

( x* j) j$ _6 k, c    mcasp->regs->DITCTL     = 0x00000000; // Not used0 I4 O1 \7 A* e  @( M$ C7 b
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
: ?3 A: ~* Q3 O0 b2 x    mcasp->regs->AMUTE      = 0x00000000; // Not used
; v7 Z; @3 y- y5 [# i+ Q9 _3 Y
6 Y/ G( p" L% t  |0 ^' i" |: n/* Starting sections of the McASP*/5 f% h6 ~/ Z: P. D1 f
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;   V' Z( C4 p) T2 @
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
0 v: r4 V% D2 |. v. M9 n    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 6 r! Z! l4 o( ]: V8 G
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
6 @3 l/ M! D$ w' {
+ A1 C9 H8 C/ w, e" b9 F+ o    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
! I, y, K- L! e! S, \    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
& k. e1 T$ B4 ]; J8 D    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
/ z8 C/ j! v3 F% n    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
; i& t+ U/ O! _: B# X( X, g
0 s6 l* \) Y5 b2 [    mcasp->regs->XSTAT = 0x0000ffff;
5 ^* n5 S6 K) O+ }9 r+ O    mcasp->regs->RSTAT = 0x0000ffff;
0 c1 E3 N0 |4 R3 n! V" r! @" S' j# \( z  S5 V
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;1 j; b0 [6 }: I8 s$ v1 G+ @# q
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );/ H) \* C+ e" M  Q
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
" E4 k0 R( f: T    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
$ K+ \9 r5 {  ^: }+ N/ y0 j4 J" H: D: A- Z2 N. B6 r1 f
    /* Write a 0, so that no underrun occurs after releasing the state machine */
9 r7 t- {0 v2 Q3 h* ^* r; d8 Z    mcasp->regs->XBUF5 = 0;
- y9 Y3 j% w6 j1 n    mcasp->regs->RBUF0 = 0;
7 ?$ q) B' u, [- {. i$ M& l% C9 G2 b$ g' j0 m; f
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
/ L% {' l# |& \. [8 w! O, _1 f    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );6 b8 N4 ]' J6 C1 v  D# n2 J9 N
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; " Q8 O3 E  c" ^5 q7 }' F
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );: o4 n- Y) d) D5 S* D* T

0 g# Q% {, F/ `    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
, @* \& ?! ^! W( }. {: r- A    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
1 u5 X) ^' S- H/ E    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
- V* l0 k9 D% i* x0 v; V    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );1 Z0 {: }1 N4 h3 \9 m+ V) e
" @! r7 q  j8 C( R% }
    CSR = 0x0000;3 @4 u6 N0 G" E5 D/ i9 p* U
    INTC_INTMUX1 = 0x3d;2 y; E7 `2 f, R; ^; L
    ISTP = (unsigned int)vectors;! J/ o+ {! r3 Y7 B. a$ y
    ICR = 0xFFF0;  
8 j7 w) K" |9 F9 r: [7 A7 H    IER |= 0x12;  
) K# o; S9 o* Y1 Y2 C    CSR |= 0x01;  
- M% W6 u# f6 L: c
6 N7 V6 J5 B$ C" R& F3 q
4 W7 H' m# l- n/ y) V* D+ p, w
/ R# I7 x% B: P% x2 k还有就是两个输入输出函数:! k  R$ ?) M  M/ y  ]& B
void output_sample(Int32 out_data)
: a, q7 j+ F) a* a7 J  _{- q9 g* T& L% ]. Z% I6 o1 L! P
  AIC31_data.uint = out_data;  ( j' A/ }( l' y8 L$ O9 T
  MCASP1_XBUF5_32BIT = AIC31_data.uint;3 g' O: z$ |6 U, O
}
( a6 c) G. f4 X- K) Q. ^( d
( g1 X, Y/ x& X2 D( p% BInt32 input_sample(void)
# ], \' k+ ]% e. w* k{  & ?( m0 H2 c/ ?# E
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
" ?7 }8 ?* l& |" h0 b  return (AIC31_data.uint);
  m/ `7 B1 D, I( A* P}
6 Z; _$ O9 E3 e2 V, p/ e1 D% w: `& _  j& B6 T
分享到:  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-1-22 15:56 , Processed in 0.044605 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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