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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
+ X3 o- i1 R3 X% I, amain文件:/ f+ h" M' |. ~  _' L6 m. G
interrupt void interrupt4(void)  
  x9 m3 F/ t9 i, z' l6 _{
! [& Z2 Z) s* f3 S" t# i  Uint32 sample;9 D0 O& A9 ?/ l4 {4 W3 d
7 C7 G, Q0 w& G( i
  sample = input_sample(); // read L + R samples from ADC
5 ^, ^/ d8 `6 r  output_sample(sample);   // write L + R samples to DAC + [# ^& v- o- `$ I9 G- c6 g9 `4 c+ g
  return;2 `: y3 q5 q# ^9 |/ B
}
1 D. f3 H- g: x2 H
8 F5 W* i" m) u% ?2 C& M+ {3 wint main( void )
: z6 u; |+ e3 U+ A( X! m: Z{
5 z1 W! i8 }& v
) \% @0 S$ U1 \" z# N, c4 E    /* Initialize BSL */* F9 R) C& G+ d  ^# @
    EVMC6747_init( );
: o) W7 _. I$ q# W7 N        /* Call evmc6747_intr function */) u, X: |* u& s, m4 ]9 k4 x5 [
    aic3106_init( );
& r/ b% C, R# K8 |; Y3 M$ h        while(1);) ?7 R' ]; \1 m" Q
}' @- ~+ }" _4 v* ~% d

6 l% R( ~4 z, R, S% K8 D+ i
' ^' j+ y1 K2 M0 haic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
* X. }5 \, E$ T5 }7 d; H* E/* Initialize MCASP1 */
+ w& m, b# j! d2 x3 @7 \; }    mcasp = &MCASP_MODULE_1;( k/ M# D+ O2 E& M0 y% n
    mcasp->regs->GBLCTL  = 0;       // Reset
7 i4 l. C, d) D- q3 d    mcasp->regs->RGBLCTL = 0;       // Reset RX
6 y2 T1 l; _1 k8 |( J7 B( a) s" Z    mcasp->regs->XGBLCTL = 0;       // Reset TX
8 P# J& |, S# n! l8 N" _    mcasp->regs->PWRDEMU = 1;       // Free-running7 \* z2 d/ i3 L: ?/ m" \
   // configure McASP0 receive registers# T9 {+ k( ?8 @2 H2 q! |+ l
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used0 M. ?0 G& b2 E& p% ]
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus" A) U0 k. s0 K- Y0 B( i- a
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
$ w! o2 f" ^* \- j% ^* E    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
2 {% j! ?" B# n( Y0 t    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)* m' G* ]2 s) T" v' @
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
5 ~3 y0 |+ ?! I1 N) s    mcasp->regs->RINTCTL    = 0x00000000; // Not used
2 k" b  @% Y: N/ M# z9 |    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2567 |' c  q4 N7 c" j1 I* X, P
5 Z* A3 S5 U9 @
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
( C1 [* A) [, i    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus4 Z% s! h5 G" q: g: h
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
' ~# f' t) y7 d: R    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-162 x* T" r* T; B8 d3 Z: A  y
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
' k* w* T) M5 z    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
$ R2 \% A  ~) w  h0 z0 o& n& A    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
! C8 g% f; {9 w    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256  A; ^2 U# _6 Y" o) Y! W9 o) D! K

4 A3 p/ y4 t: v1 o0 s6 W    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN/ y, T# r5 x3 J' m1 v) [3 o. ^; u
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
; m2 E  B6 t" O, K& ^4 j! t! c7 J    mcasp->regs->PFUNC      = 0;          // All MCASPs
) ?- \" L2 D+ j* I    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
7 }+ v/ x& H5 s4 ?& m7 x2 o. ^( R2 X- y! V
    mcasp->regs->DITCTL     = 0x00000000; // Not used. V4 u2 X8 U' P& d
    mcasp->regs->DLBCTL     = 0x00000000; // Not used* W4 W* X% ?& {* {, _; j
    mcasp->regs->AMUTE      = 0x00000000; // Not used
8 s  V9 m! t2 R4 m$ L- R& A8 b" ?1 s/ m2 z
/* Starting sections of the McASP*/4 {3 \, d: v  E1 S# T; [) M
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
1 `. ~- Q9 e$ ]    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
7 Y; y2 F3 Y1 Y- h- e! U  J9 w' i/ ^    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
* e6 E$ R& V2 ]    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
6 I  T+ v( o2 G; G6 Q; e/ s/ e8 M! j  T  F8 P( t% |
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 4 ?0 |; n% V8 Y& b9 n2 k1 r
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );1 |; g4 C5 n1 J
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; " h6 j# E: B$ \$ E
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
3 j7 L& ~7 W) y9 z- ^: A. C
( r* V6 i' S& ^    mcasp->regs->XSTAT = 0x0000ffff;
0 |# M9 D1 J* x( s& l    mcasp->regs->RSTAT = 0x0000ffff; " J: [/ y' J+ m% _' |

0 j. `. D  [! a; R    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;$ g* H; ?1 x" \4 w& V# b
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
( N! C& Q5 h& y7 u& a; W    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
/ O( B, d6 l/ Q- Z1 g    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
& E7 C% |& y: h: ?0 D, B2 x* h/ H7 z2 I" @! E& T2 {
    /* Write a 0, so that no underrun occurs after releasing the state machine */" D- W5 [6 |3 t5 Z0 y$ b( b& `
    mcasp->regs->XBUF5 = 0;
+ p$ E- c. k; B+ B$ V1 @    mcasp->regs->RBUF0 = 0;
+ ?  [+ t, Z& i4 O2 `9 h0 g
( |: d" E9 a) |7 ^) a# H    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 7 ]  d! ]3 I9 J. U9 G
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );& r2 M& p/ j7 G. A$ }' r
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
/ u' N5 ~, y2 H* J* E# O1 M    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
" [9 Z7 N6 Q2 _+ U) d4 D" U! A& s
; z- Z5 I! H+ S, {  N    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 0 D; e2 u: h! h' y2 r' o( g
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
6 X4 x* G0 E' W7 z  b7 O5 h8 G3 o  O    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
, Y6 E3 h/ ~) j' O* K3 a6 q( \    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );. d9 R- r# `" I4 }
$ `) i! x- x, k8 M
    CSR = 0x0000;  Z' t& a/ I. h6 v# H1 R
    INTC_INTMUX1 = 0x3d;# E  |5 u! H* V: O5 ~/ ~4 Z
    ISTP = (unsigned int)vectors;
0 \) Q1 G4 T$ Z8 C% \4 q# i! u    ICR = 0xFFF0;  
: Y( P/ e3 A2 s' Y5 t/ c    IER |= 0x12;  
7 e, Z$ p# O$ F: t    CSR |= 0x01;  ; T$ V3 f$ C1 }) k

5 D* ^8 |# @1 _$ [- H3 g/ I
4 ]9 X' ^  v$ }+ t; h+ Y) M: J1 ^1 r
还有就是两个输入输出函数:
) l5 n' y, v8 L. S6 I3 U# Tvoid output_sample(Int32 out_data)
8 K6 ^; R5 b5 \  j9 O; j{
0 ^7 C6 S# [6 {8 ]  AIC31_data.uint = out_data;  
; j+ m; I( o. z8 @  MCASP1_XBUF5_32BIT = AIC31_data.uint;
" P! J3 e; j3 c8 V4 R+ v( M}
/ J6 ]6 |1 @& g4 Y5 t7 H) o+ p$ K
Int32 input_sample(void)  d: S5 ]3 s+ Q, u$ a; b
{  " z$ p$ y! ]+ d: D# _4 @
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
* s9 L# S- K1 _; a  return (AIC31_data.uint);
+ u2 r8 c- k) q' v2 R) O}
8 @) P, p& T( C" U+ V2 m. w! q5 ?; ^( b. {6 i2 e
分享到:  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-17 22:51 , Processed in 0.040667 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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