C6747利用McASP发送中断方式完成音频输入信号的直接输出 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:6 `0 Z: Z1 r- C9 ^+ M
main文件:5 Z# f' w: M9 ]! {; a
interrupt void interrupt4(void)  - ^' J0 o9 ?6 _1 }, H
{
8 q0 ], u1 s5 }" q7 b2 \6 i  Uint32 sample;
' O+ i  |2 Y5 C: A) U* O5 T+ O5 r, l
  sample = input_sample(); // read L + R samples from ADC
/ z' Z* w* H) O& C4 O  output_sample(sample);   // write L + R samples to DAC
/ T# Q9 H3 H3 H# H2 `9 [, G8 u  return;, j* e# b$ P" x( I, Z/ r
}
7 S7 J# i: ]+ }; z1 {) l, E6 L
0 r0 M- ^" Y! O) f/ v! B+ ^int main( void )2 U; g% J  d4 F  y
{& ?. x: |: }# s0 F
' @8 t9 ?* x$ x  }; a- r: k& z
    /* Initialize BSL */
% X; O+ J4 d5 A% V3 y& n, x% E' F2 I7 ~# q    EVMC6747_init( );2 Z* @! L6 T3 Z' P, e
        /* Call evmc6747_intr function */
5 u, X2 v+ O( x! m: C    aic3106_init( );7 w# K. j  Q/ T1 k
        while(1);
, O0 s' B5 r* D$ X* D}
. a6 E* ~6 {1 G0 p% h  n  ~& z. L, m
, N9 M  V4 F% {1 q- q2 c7 Y& X
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
; p; d) L2 I1 W* g) O/* Initialize MCASP1 */
5 `( K) x0 G6 d! m. s3 o0 ?    mcasp = &MCASP_MODULE_1;
( o1 Y# A1 h4 l- Q5 q, |) j    mcasp->regs->GBLCTL  = 0;       // Reset- m3 G# x2 [4 g0 r1 _: q: `% t
    mcasp->regs->RGBLCTL = 0;       // Reset RX
, Z% D- k% D1 g    mcasp->regs->XGBLCTL = 0;       // Reset TX
/ k1 N- Z3 c  R0 Z" Q    mcasp->regs->PWRDEMU = 1;       // Free-running' b" O' Z2 M  f; t& r
   // configure McASP0 receive registers
# H- m: Y) t# q    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used  c( o; a# e. \
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
" I' k0 O6 ~7 S4 u3 v2 @    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word0 ^& ^1 F* t1 J# `9 a* v
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)! w- a6 r1 b' n2 o; N) [
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)/ g6 ^" V0 @" R; T" g$ k
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
2 F& t; P& R) M' x8 j: q    mcasp->regs->RINTCTL    = 0x00000000; // Not used
5 q- u# F8 ]: V5 ?5 a1 |5 G    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256& ^0 r# h+ l  F8 ]! p7 Q/ T
5 E1 M) _0 s, w5 A- \2 o) t, V4 p% x
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used0 n2 m7 k2 P5 |/ |3 K
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus5 k. X/ |3 q0 m1 X$ w3 |
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
0 \/ I! X: M4 b8 z4 M  M9 @: t    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
% D+ r, a- U7 l6 W' O, t5 [    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
: ]% w- F0 R1 m. Q: u    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1$ y) i) G  U9 b
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit: i. F2 i% d5 q& @& k6 Y, S
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256% X, `9 N4 Q( N

( B/ n/ @3 A. y    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
/ E% P' m0 ~3 U# t* u8 j7 L6 E    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
0 d# ]% B+ o: U" m) e( A    mcasp->regs->PFUNC      = 0;          // All MCASPs
8 W. r0 ^: F- G: F1 a    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
! c8 k3 ]+ P8 `% d% R  \$ s! w+ t2 z2 k
    mcasp->regs->DITCTL     = 0x00000000; // Not used
  _) d# m( ]4 ~0 C3 `( t    mcasp->regs->DLBCTL     = 0x00000000; // Not used. N3 ?; j8 d" J: Q+ P! o% o
    mcasp->regs->AMUTE      = 0x00000000; // Not used
; t* Q2 U" P0 Z0 \. W+ n$ ^5 L. p: B" ?- i+ G
/* Starting sections of the McASP*/
) c5 F& v( p1 |/ G- P: e) z+ O    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; : X( j9 e2 }% W* H& C+ D7 X3 k
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  ( a9 r* l3 T5 D
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; % L2 c& A: C  ~& @
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
8 L! G8 }! d2 v$ }
$ y) i9 k& o0 e' v' p    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 4 O) f4 e3 s- c) r7 K' d3 j
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );# J: ~( c: ?8 K: c/ O* A: ^8 [6 B
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; ( f# I7 S" J6 f1 j# H: q7 ?7 e
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
  F4 K7 f' E4 _  f& F! t5 G' ?! X  V  z- s- Y) {0 p
    mcasp->regs->XSTAT = 0x0000ffff; 7 j0 y  X0 m* p5 r
    mcasp->regs->RSTAT = 0x0000ffff; 3 i8 W5 K% v1 h, \1 ?6 r& q  u
+ ~! S: Q" ~4 T
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;/ F) a  V* ?: f0 E7 p
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );0 ^- |1 T" C2 f$ b8 A& B* ?
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 2 ]+ w% }9 x$ |: q
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
  {0 b9 g' |0 H' Q2 H4 W9 |$ l; q: Y1 o0 i! I3 e
    /* Write a 0, so that no underrun occurs after releasing the state machine */& C2 c! L# i+ r. Q  g
    mcasp->regs->XBUF5 = 0;
- V  z; l8 \6 B: L    mcasp->regs->RBUF0 = 0;9 O; M! o' A( ^: i! O9 Y. U5 |
. p$ {7 w, |. m! k5 E( N
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 5 |- ]0 }3 f6 X( {
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );/ J& F5 F6 f5 x, p3 ]( J. D+ {
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
' N* U0 d7 S7 c" J' D  f1 g. ^    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
# J$ K6 M# J$ d  P% ~; h
0 [' e- Z: Y; |    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; , @/ L  z' m/ o, e* G1 `
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
1 x0 {: w" S; X( f+ I    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; ' {8 O+ l' ?* [
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );+ ?3 Z$ ~6 W4 Q( {3 X- m( g8 L
# O7 a8 T0 n$ a* ?- X6 w
    CSR = 0x0000;) `) J3 @" Y5 W) Z! w
    INTC_INTMUX1 = 0x3d;6 w3 P$ h; B8 m$ M4 k3 ]4 @
    ISTP = (unsigned int)vectors;( T5 I/ H+ r# o6 X5 }6 k3 W
    ICR = 0xFFF0;  
* R6 M! ^6 r% z- K    IER |= 0x12;  . j" ?* S  f2 K- ~, A# l  _8 C8 Z
    CSR |= 0x01;  
, N- r  g% T3 z7 c/ m( Z" g
; }6 f2 S% g4 D, y7 x4 H9 }: M8 {4 c, P' @% M
9 K) q0 f. E3 [) d
还有就是两个输入输出函数:6 ]6 _2 _! r) I
void output_sample(Int32 out_data)
4 h! ~' H9 _5 T5 }{
7 d6 t# F' Z& V, j# b$ B0 A  u  AIC31_data.uint = out_data;  5 |8 j! T! ?# A, d1 t
  MCASP1_XBUF5_32BIT = AIC31_data.uint;
6 [9 s$ {. W9 s* E}
; o2 ^. D, |( B' w; L6 o8 z* k0 r+ ~/ B( D1 ^+ J. Y- c  _
Int32 input_sample(void): Z* X/ S; C- \
{  
3 e+ ]* h2 l. X+ Q# S1 F  AIC31_data.uint = MCASP1_RBUF0_32BIT;
" P( x4 h( t: ^  return (AIC31_data.uint);+ j, t% _& j* T: X5 k" u5 Q: f% D
}
" N. v6 o, l. f7 h7 g& y% s$ y, X3 Q
分享到:  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, 2025-11-21 08:23 , Processed in 0.038211 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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